java如何忽略过程值_如果值为null,如何告诉Jackson在序列化期间忽略某个字段?...

回答(16)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

mapper.setSerializationInclusion(Include.NON_NULL);

要么:

@JsonInclude(Include.NON_NULL)

class Foo

{

String bar;

}

或者,您可以在getter中使用 @JsonInclude ,以便在值不为null时显示该属性 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果使用Spring,则为全局配置

@Configuration

public class JsonConfigurations {

@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;

}

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

Jackson 2.x使用

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

使用Jackson> 1.9.11和<2.x使用 @JsonSerialize 注释来执行此操作:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果要将此规则添加到Jackson 2.6中的所有模型,请使用:

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

这在 Spring boot 2.0.3 and Jackson 2.0 为我工作

import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_NULL)

public class ApiDTO

{

// your class variable and

// methods

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

@JsonInclude(JsonInclude.Include.NON_NULL)

@JsonInclude(JsonInclude.Include.NON_EMPTY)

应该管用 .

Include.NON_EMPTY 表示如果属性的值不为null且不为空,则序列化该属性 . Include.NON_NULL 表示如果属性值不为null,则序列化该属性 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

这已经困扰了我很长一段时间,我终于找到了这个问题 . 问题是由于导入错误 . 早些时候我一直在使用

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)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在我的情况下

@JsonInclude(Include.NON_EMPTY)

使它工作 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可以使用以下映射器配置:

mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);

自2.5以来你可以用户:

mapper.setSerializationInclusion(Include.NON_NULL);

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在Jackson 2.x中,使用:

@JsonInclude(JsonInclude.Include.NON_NULL)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

只是为了扩展其他答案 - 如果你需要在每个字段的基础上控制遗漏空值,请注释相关字段(或者注释字段的'getter') .

example - 这里只有 fieldOne 将从json中省略,如果它为null . 无论是否为空,都将包含 fieldTwo .

public class Foo {

@JsonInclude(JsonInclude.Include.NON_NULL)

private String fieldOne;

private String fieldTwo;

}

要将类中的所有空值省略为默认值,请注释该类 . 如有必要,仍可使用按字段/ getter注释覆盖此默认值 .

example - 这里 fieldOne 和 fieldTwo 将分别从json中省略,因为这是类注释的默认设置 . 但是,由于字段上的注释, fieldThree 将覆盖默认值并始终包含在内 .

@JsonInclude(JsonInclude.Include.NON_NULL)

public class Foo {

private String fieldOne;

private String fieldTwo;

@JsonInclude(JsonInclude.Include.ALWAYS)

private String fieldThree;

}

UPDATE

以上是 Jackson 2 . 对于 earlier versions 的 Jackson 你需要使用:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)

代替

@JsonInclude(JsonInclude.Include.NON_NULL)

如果这个更新很有用,请在下面提到ZiglioUK的答案,它在我更新我的答案之前很久就指出了更新的Jackson 2注释!

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

对于Jackson 2.5使用:

@JsonInclude(content=Include.NON_NULL)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果在 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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果您正在尝试序列化对象列表并且其中一个为null,那么您最终将在json中包含null项,即使

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

将导致:

[{myObject的},空]

得到这个:

[{myObject的}]

人们可以这样做:

mapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer() {

@Override

public void serialize(Object obj, JsonGenerator jsonGen, SerializerProvider unused)

throws IOException

{

//IGNORES NULL VALUES!

}

});

提示:如果您正在使用DropWizard,则可以使用environment.getObjectMapper()检索Jersey使用的ObjectMapper .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

你可以设置 application.properties :

spring.jackson.default-property-inclusion=non_null

或 application.yaml :

spring:

jackson:

default-property-inclusion: non_null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值