强制杰克逊反序列化一个特定的字段,即使它是空的?

时间:2017-02-10 01:03:52

标签: spring spring-mvc jackson

我使用jackson 2.6.3来做JSON编组/解组。如果有效负载中缺少某个字段,则不会调用该字段的setter。如果有效负载中缺少字段,我需要插入一些默认值。还有一些业务逻辑检查。如果不在设置器中,不知道放在哪里。使用Spring boot 1.4.0。

非常感谢任何提示/线索

2 个答案:

答案 0 :(得分:0)

您可以在构造函数和构造函数参数中使用@JsonCreaty的参数化构造函数和@JsonProperty。然后,即使任何属性为null,Jackson也会始终调用此构造函数进行反序列化。如果任何值为null,您可以在那里设置默认值,甚至可以进行业务逻辑检查。

样品:

timestamps()

答案 1 :(得分:0)

您可以将DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES用于假。

如果需要通过从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)));


    }
}

希望这会对你有所帮助。