如何在Spring Boot 1.5.9中全局配置jackson非null

时间:2018-04-23 20:58:26

标签: java spring spring-boot jackson

我正在使用Spring Boot 1.5.9和jackson 2.8.10。我想全局配置这个@JsonInclude(Include.NON_EMPTY)注释,以便我的API的所有对象都按照注释规则进行序列化。

我怎么能得到这个?

我试图浏览application.properties文件

spring.jackson.default-property-inclusion=non_null

并通过配置类:

@Primary
    @Bean
    public Jackson2ObjectMapperBuilder objectMapperBuilder() {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        builder.serializationInclusion(JsonInclude.Include.NON_NULL);
        builder.serializationInclusion(JsonInclude.Include.NON_EMPTY);
        builder.failOnUnknownProperties(false);
        return builder;
    }

但这些都没有效果。它不起作用

有谁知道如何使这项工作?

1 个答案:

答案 0 :(得分:1)

使用spring.jackson.default-property-inclusion=non_null属性是最好的方法,因为Jackson2ObjectMapperBuilder对象会选择它。这应该确保它将在任何地方应用。

此方法适用于2.0.0。我测试了1.5.9,1.5.10,1.5.11和1.5.12,但它们都没有像一个简单的测试一样工作:

@Autowired 
private ObjectMapper objectMapper;

@Test
public void shouldOutputEmpty() {
  Map<String, Object> obj = new HashMap<>();
  obj.put("a", null);
  String result = objectMapper.writeValueAsString(obj);
  assertThat(result).isEqualTo("{}");
}

这很奇怪,因为Appendix A mentions this property。解决的一种方法是将Jackson更新为2.9.X(Spring Boot 2.0.0使用2.9.4):

dependencyManagement {
  dependencies {
    dependency 'com.fasterxml.jackson.core:jackson-core:2.9.4'
    dependency 'com.fasterxml.jackson.core:jackson-databind:2.9.4'
    dependency 'com.fasterxml.jackson.core:jackson-annotations:2.9.4'
  }
}