Tag: jackson

jackson2.0与泽西岛1.12

有没有人设法使用jackson2.0与泽西1.12。 知道这将是非常有趣的。 我们必须在整个地方使用jackson1.9.x,因为jersey有jackson如此强烈耦合。 从我所看到的甚至jersey2.0M3仍然使用jackson1.9.2。 所以似乎没有必要等待jersey队在不久的将来做到这一点。

使用超大的json文件。 总是内存不足

如何使用带有jackson的流API json? 请参阅下面的代码: ObjectMapper mapper = new ObjectMapper(); Map map = new HashMap(); List list = new ArrayList(); // Get images in database try { Class.forName(DRIVER); connection = DriverManager.getConnection(URL, USER, PASSWORD); Statement s = connection.createStatement(); ResultSet r = s.executeQuery(“select * from images”); while (r.next()) { byte[] imageBytes = r.getBytes(“image”); String imageBase64 = DatatypeConverter.printBase64Binary(imageBytes); list.add(imageBase64); } […]

Java 8 Jacksonvalidation

我有一个springbootrest服务。 用户传入一个json对象,该对象被反序列化到这个java pojo中: public final class Request { private String id; private double code; private String name; public String getId() { return id; } public double getCode() { return code; } public String getName() { return name; } } 所以用户需要传入以下json: { “id”: “123457896”, “code”: “Foo”, “name”: “test” } 我想让所有这些领域都需要。 提供更少或更多的东西会引发exception。 有没有办法告诉jackson在反序列化时validation输入? 我试过@JsonProperty(required=true)但这不起作用; 显然从这里和这里看来, JsonProperty注释似乎没有得到尊重。 我有我在控制器中调用的validation器: […]

ZonedDateTime的jackson反序列化问题

我在我正在使用的服务的反序列化过程中使用的类中有以下字段。 private ZonedDateTime transactionDateTime; 我正在使用的服务可以使用以下模式返回Date或DateTime: yyyy-MM-dd’T’HH:mm:ss.SSSZ 让我举两个服务返回的例子: 2015-11-18T18:05:38.000 + 0200 2015-11-18T00:00:00.000 + 0200 虽然第一个工作正常,但后者导致在反序列化期间抛出以下exception: java.time.format.DateTimeParseException:无法在索引23处解析文本’2015-11-18T00:00:00.000 + 0200′ 我正在使用; Spring Boot 1.3.1 Jackson 2.6.4(包含JSR310模块) 这需要自定义反序列化类吗?

基于对象类型反序列化JSON

我正在创建一个以JSON消息的forms接收请求的服务。 我需要解析消息并根据请求类型采取适当的操作。 例如(伪代码): switch(request.type) { case “NewOrder”: createNewOrder(order); break; case “CancelOrder” cancelOrder(orderId); break; } 似乎大多数JSON API(至少那些为您执行对象映射的API)需要根对象类型来反序列化。 这周围有什么优雅的方式吗? 例如,在Jackson API(使用完整对象映射)中,我需要调用mapper,如下所示: NewOrder newOrder = mapper.readValue(src, NewOrder.class); CancelOrder cancelOrder = mapper.readValue(src. CancelOrder.class); 这意味着我需要在解析它之前知道对象的类。 我真正需要的是一些方法来查看JSON字符串,确定请求类型,然后调用适当的readValue()方法 – 如下所示: String requestType = getRequestType(src); switch(request.type) { case “NewOrder”: NewOrder newOrder = mapper.readValue(src, NewOrder.class); createNewOrder(newOrder.order); break; case “CancelOrder” CancelOrder cancelOrder = mapper.readValue(src. CancelOrder.class); […]

jackson:从json中删除一些值并保留一些空值

我有这样的模型: public class Employee { @JsonProperty(“emplyee_id”) private Integer id; @JsonProperty(“emplyee_first_name”) private String firstName; @JsonProperty(“emplyee_last_name”) private String lastName; @JsonProperty(“emplyee_address”) private String address; @JsonProperty(“emplyee_age”) private Byte age; @JsonProperty(“emplyee_level”) private Byte level; //getters and setters } 现在我需要使用此(仅)模型创建两个JSON。 第一个必须这样,例如: { “employee_id”:101, “employee_first_name”:”Alex”, “employee_last_name”:”Light”, “employee_age”:null, “employee_address”:null } 第二个必须像这样: { “employee_id”:101, “employee_level”:5 } 顺便说一句,我已经测试了@JsonIgnore和@JsonInclude(JsonInclude.Include.NON_NULL) 。 第一个(我知道的)问题是,那些字段不能包含在其他JSON中(例如,如果level获取此注释,它将不包含在第二个JSON中) 而第二个的问题是, null值不能包含在JSON中。 那么我可以保留空值并阻止一些其他属性包含在JSON中而无需创建额外的模型吗? 如果答案是肯定的,我该怎么办呢? 如果不是我真的很感激,如果有人给我这个状态的最佳解决方案。 […]

使用Jackson进行不对称序列化和反序列化

我正在使用Jackson为RESTful API序列化和反序列化数据。 我想要一个REST资源( /comments ),它允许POST注释以及获取注释列表。 这是发布到/comments的内容的(简化)示例。 {“text”:”Text”,”author”:”Paul”,”email”:”paul@example.org”} 以下是GET /comments的结果: [{“text”:”Text”,”author”:”Paul”,”emailHash”:”76w0kjKP9HpsdhBjx895Sg==”}] 由于任何人都不应该看到电子邮件地址,因此我决定只返回响应中电子邮件地址的MD5哈希值。 我创建了一个简单的POJO类Comment ,其中包含用于text , author , email和email emailHash getter和setter的字段。 现在,当我序列化结果时,我得到的是以下内容: [{“text”:”Text”,”author”:”Paul”,”email”:null,”emailHash”:”76w0kjKP9HpsdhBjx895Sg==”}] 但我真的不喜欢email在这里返回null 。 它根本不应该被包括在内。 在该字段上使用注释@JsonIgnore也将在反序列化时忽略它。 我是否必须创建两个类,例如CreationComment和ResultComment以及一个共享公共字段的超类Comment ,或者是否有一种方法可以避免创建其他类?

Hibernate和JSON – 是否存在循环依赖的最终解决方案?

在这些日子里,我正在努力使用Hibernate实体和JSON,尽管有很多关于该对象的问题,但我还是无法在存在循环依赖性的情况下进行序列化。 我和Gson和jackson都试过了,但我没有取得很多进展。 这是我的对象的摘录。 这是“父”类。 @Entity public class User extends RecognizedServerEntities implements java.io.Serializable { @Id @GeneratedValue(strategy = IDENTITY) @Column(name = “id”, unique = true, nullable = false) private Integer id; @OneToMany(fetch = FetchType.LAZY, mappedBy = “user”, orphanRemoval = false) @Cascade({CascadeType.SAVE_UPDATE}) private Set threads = new HashSet(0); //…other attributes, getters and setters } 这就是“儿童”课程 @Entity @Table(name = […]

如何使用Jackson的本地化小数分隔符反序列化浮点值

我用Jackson解析的输入流包含纬度和经度值,例如: { “name”: “product 23”, “latitude”: “52,48264”, “longitude”: “13,31822” } 由于某种原因,服务器使用逗号作为小数分隔符,产生InvalidFormatException 。 由于我无法更改服务器输出格式,因此我想教jackson的ObjectMapper来处理这些情况。 这是相关的代码: public static Object getProducts(final String inputStream) { ObjectMapper objectMapper = new ObjectMapper(); try { return objectMapper.readValue(inputStream, new TypeReference() {} ); } catch (UnrecognizedPropertyException e) { e.printStackTrace(); } catch (InvalidFormatException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (JsonParseException […]

Jackson2 PropertyFilter用于嵌套属性,还是有另一种方法?

我目前正在寻找一种以多种方式序列化对象而不直接干扰类的方法。 (比如添加大量注释) 想象一下这样的一个类: class User { String id; String name; String email; … User manager; } SimplePropertyFilter提供了几乎所需的function,但问题是此filter忽略当前对象的级别,并在每个对象上应用所有已定义的filter,无论它是否为嵌套filter。 我不仅限于filter,但我想避免为每个所需的json响应编写多个类。 有没有办法用Jackson2实现这种行为? 如果我们想为编辑表单序列化,我们需要所有字段,但对于用户列表,我们可能只需要其中的一些。 然而,对于经理而言,我们总是只需要“ id ”和id 。 这就是搜索的解决方案。 JSON输出应该是这样的: { “id” : “20”, “login” : “USER20”, “name” : “User 20”, “email” : “user20@no.where”, “manager” : { “id” : “1”, “name” : “Administrator” } } 我觉得属性过滤方法让我非常接近所需的解决方案,但从我发现的只能定义“简单”属性。 public class UserJsonWriter […]