我使用jackson 2.6.3来执行JSON封送/解封。如果有效负载中缺少字段,则不会调用该字段的setter。如果有效负载中缺少字段,我需要插入一些默认值。还有一些业务逻辑检查。如果不在setter中,不确定放在哪里。使用Spring boot 1.4.0。
任何提示/线索都深为感激
您可以使用反序列化功能。将未知属性的失败设置为false。
如果需要通过从spring扩展
WebMvcConfigrationAdaptor
类以添加HttpMessageConverter
来覆盖Spring Boot自动配置,则此配置将在反序列化时忽略任何未知属性。
@Configuration
class WebConfiguration extends WebMvcConfigurerAdapter{
@Override
public void configureMessageConverters(
List<HttpMessageConverter<?>> converters) {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.indentOutput(true).dateFormat(
new SimpleDateFormat("yyyy-MM-dd"));
converters.add(new MappingJackson2HttpMessageConverter(builder.build()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
false)));
}
}
希望这对你有帮助。
您可以将参数化构造函数与构造函数上的@JsonCreator和构造函数参数中的@JsonProperty一起使用。然后Jackson将始终调用此构造函数进行反序列化,即使任何属性为null。如果任何值为null,您可以在那里设置默认值,甚至可以进行业务逻辑检查。
样本:
public class Person {
private Integer id;
private String name;
@JsonCreator
public Person(@JsonProperty(value = "id") Integer id, @JsonProperty(value = "name") String name) {
this.id = id != null ? id : Integer.valueOf(1); //setting default
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
有没有一种方法可以使用Jackson JSON处理器来执行自定义字段级别的序列化?例如,我想让 注意,age=25被编码为数字,而favoritenumber=123被编码为字符串。Jackson将编组为一个数字。在这种情况下,我希望将favoriteNumber编码为字符串。
问题内容: 我无法找出使用杰克逊实现自定义序列化/反序列化的正确方法。我有很多类(〜50),它们带有应被序列化/反序列化而不是原始的原始字段。喜欢: 所有序列化和反序列化都非常相似,我只需要在整数之后添加一个后缀(C,页面,米等)。 一种简单的方法是在每个这样的字段中添加一对/ 注释并实现它们。但是我最终会得到100个 非常相似的 序列化器/反序列化器。 我想到了添加自定义注释的各个领域,说或,这
有没有一个Jackson注释允许将数组反序列化到我的POJO的特定字段中?我可以用自定义的反序列化器很容易地做到这一点,但我希望用类内联的方式来完成。 例如,我从Elasticsearch返回了以下JSON。 我的POJO如下: 我希望“排序”数组(在数组[0]中总是有一个long,在数组[1]中总是有一个String)被反序列化如下: 我发现了另一个问题,唯一的答案是自定义的反序列化器,如果可以
我有这样的Jackson注释类: 假设我不能更改我的类代码。那么,如何让ObjectMapper只覆盖field2的JsonIgnore并将其序列化为json?但我希望它忽略field4。这很简单,只需要几行代码吗? 我的常规序列化代码:
我有这样一门课: 我知道基于typeToClassId的对象obj是什么类型,不幸的是只有在运行时才知道。 我想基于typeToClassId解析出obj——这里最好的方法是什么?注释似乎已经过时了,基于ObjectMapper的东西似乎是对的,但我很难弄清楚最好的方法可能是什么。 类似于类clazz=lookUpClassBasedOnId(typeToClassId)objectMapper的
所以我有 我读过Baeldung的文章和其他东西,但似乎我的选项是自定义类型(这是一个原始类型)或全局类型。如何实现这种自定义序列化?