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;
}
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ApiDTO
{
// your class variable and
// methods
}
16 回答
使用Jackson> 1.9.11和<2.x使用
@JsonSerialize
注释来执行此操作:@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
如果要将此规则添加到Jackson 2.6中的所有模型,请使用:
这在 Spring boot 2.0.3 and Jackson 2.0 为我工作
应该管用 .
Include.NON_EMPTY
表示如果属性的值不为null且不为空,则序列化该属性 .Include.NON_NULL
表示如果属性值不为null,则序列化该属性 .要使用Jackson> 2.0禁止使用空值序列化属性,您可以configure the ObjectMapper directly,或使用@JsonInclude注释:
要么:
或者,您可以在getter中使用
@JsonInclude
,以便在值不为null时显示该属性 .my answer至How to prevent null values inside a Map and null fields inside a bean from getting serialized through Jackson中提供了更完整的示例 .
如果使用Spring,则为全局配置
Jackson 2.x使用
这已经困扰了我很长一段时间,我终于找到了这个问题 . 问题是由于导入错误 . 早些时候我一直在使用
哪个已被弃用 . 只需替换导入
并用它作为
在我的情况下
使它工作 .
您可以使用以下映射器配置:
自2.5以来你可以用户:
在Jackson 2.x中,使用:
只是为了扩展其他答案 - 如果你需要在每个字段的基础上控制遗漏空值,请注释相关字段(或者注释字段的'getter') .
example - 这里只有
fieldOne
将从json中省略,如果它为null . 无论是否为空,都将包含fieldTwo
.要将类中的所有空值省略为默认值,请注释该类 . 如有必要,仍可使用按字段/ getter注释覆盖此默认值 .
example - 这里
fieldOne
和fieldTwo
将分别从json中省略,因为这是类注释的默认设置 . 但是,由于字段上的注释,fieldThree
将覆盖默认值并始终包含在内 .UPDATE
以上是 Jackson 2 . 对于 earlier versions 的 Jackson 你需要使用:
代替
如果这个更新很有用,请在下面提到ZiglioUK的答案,它在我更新我的答案之前很久就指出了更新的Jackson 2注释!
对于Jackson 2.5使用:
如果在 Spring Boot 中,您可以直接通过属性文件自定义jackson
ObjectMapper
.示例
application.yml
:可能的值是:
更多:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper
如果您正在尝试序列化对象列表并且其中一个为null,那么您最终将在json中包含null项,即使
将导致:
[{myObject的},空]
得到这个:
[{myObject的}]
人们可以这样做:
提示:如果您正在使用DropWizard,则可以使用environment.getObjectMapper()检索Jersey使用的ObjectMapper .
你可以设置
application.properties
:或
application.yaml
:http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html