我正在使用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;
}
但这些都没有效果。它不起作用
有谁知道如何使这项工作?
答案 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'
}
}