[java] 如果傑克遜在序列化過程中忽略某個字段的值是否為空,該如何告訴他?


Answers

隨著傑克遜> 1.9.11和<2.x使用@JsonSerialize註釋來做到這一點:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)

Question

如果傑克遜可以配置為在序列化期間忽略字段值(如果該字段的值為空)。

例如:

public class SomeClass {
   // what jackson annotation causes jackson to skip over this value if it is null but will 
   // serialize it otherwise 
   private String someValue; 
}



如果在Spring Boot中 ,您可以直接通過屬性文件自定義jackson ObjectMapper

示例application.yml

spring:
  jackson:
    default-property-inclusion: non_null # only include props if non-null

可能的值是:

always|non_null|non_absent|non_default|non_empty

更多: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapperhttps://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper




如果您想將此規則添加到Jackson 2.6+的所有模型中,請使用:

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);



在Jackson 2.x中,使用:

@JsonInclude(JsonInclude.Include.NON_NULL)



傑克遜2.x +使用

mapper.getSerializationConfig().withSerializationInclusion(JsonInclude.Include.NON_NULL);



這一直困擾我很長一段時間,我終於找到了問題。 這個問題是由於一個錯誤的導入。 早些時候我一直在使用

com.fasterxml.jackson.databind.annotation.JsonSerialize

哪些已被棄用。 只需更換導入

import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;

並將其用作

@JsonSerialize(include=Inclusion.NON_NULL)



在我的情況

@JsonInclude(Include.NON_EMPTY)

使它工作。




Links



Tags

java java   jackson