如果该字段的值为null,Jackson如何配置为在序列化期间忽略字段值.
例如:
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;
}
Run Code Online (Sandbox Code Playgroud)
Pro*_*uce 1063
要使用Jackson> 2.0禁止使用空值序列化属性,可以直接配置ObjectMapper或使用@JsonInclude注释:
mapper.setSerializationInclusion(Include.NON_NULL);
Run Code Online (Sandbox Code Playgroud)
要么:
@JsonInclude(Include.NON_NULL)
class Foo
{
String bar;
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以@JsonInclude在getter中使用,以便在值不为null时显示该属性.
一个更完整的例子是在提供我的回答对如何防止豆内的地图内,空值空字段从通过杰克逊得到连载.
WTK*_*WTK 125
使用Jackson> 1.9.11和<2.x使用@JsonSerialize注释来做到这一点:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
dav*_*wil 116
只是为了扩展其他答案 - 如果你需要在每个字段的基础上控制遗漏空值,请注释相关字段(或者注释字段的'getter').
例子 -fieldOne如果它是null,这里只会从json中省略.fieldTwo将始终包括在内,无论它是否为null.
public class Foo {
@JsonInclude(JsonInclude.Include.NON_NULL)
private String fieldOne;
private String fieldTwo;
}
Run Code Online (Sandbox Code Playgroud)
要将类中的所有空值省略为默认值,请注释该类.如有必要,仍可使用按字段/ getter注释覆盖此默认值.
示例 -此处fieldOne并且fieldTwo如果它们分别为null,将从json中省略,因为这是类注释的默认设置.fieldThree但是,由于字段上的注释,它将覆盖默认值并始终包含在内.
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Foo {
private String fieldOne;
private String fieldTwo;
@JsonInclude(JsonInclude.Include.ALWAYS)
private String fieldThree;
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
以上是杰克逊2.对于早期版本的Jackson,您需要使用:
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
Run Code Online (Sandbox Code Playgroud)
代替
@JsonInclude(JsonInclude.Include.NON_NULL)
Run Code Online (Sandbox Code Playgroud)
如果这个更新很有用,请在下面提到ZiglioUK的答案,它在我更新我的答案之前很久就指出了更新的Jackson 2注释!
Zig*_*oUK 58
在Jackson 2.x中,使用:
@JsonInclude(JsonInclude.Include.NON_NULL)
Run Code Online (Sandbox Code Playgroud)
Ere*_*maz 36
您可以使用以下映射器配置:
mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);
Run Code Online (Sandbox Code Playgroud)
从2.5开始你可以用户:
mapper.setSerializationInclusion(Include.NON_NULL);
Run Code Online (Sandbox Code Playgroud)
小智 21
你可以设置application.properties:
spring.jackson.default-property-inclusion=non_null
Run Code Online (Sandbox Code Playgroud)
或者application.yaml:
spring:
jackson:
default-property-inclusion: non_null
Run Code Online (Sandbox Code Playgroud)
http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
alf*_*han 12
在我的情况下
@JsonInclude(Include.NON_EMPTY)
Run Code Online (Sandbox Code Playgroud)
使它工作.
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
Run Code Online (Sandbox Code Playgroud)
应该管用.
Include.NON_EMPTY表示如果属性的值不为null且不为空,则序列化该属性.
Include.NON_NULL表示如果属性值不为null,则序列化该属性.
如果要将此规则添加到Jackson 2.6+中的所有模型,请使用:
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
Run Code Online (Sandbox Code Playgroud)
如果在Spring Boot中,您可以ObjectMapper直接通过属性文件自定义jackson .
示例application.yml:
spring:
jackson:
default-property-inclusion: non_null # only include props if non-null
Run Code Online (Sandbox Code Playgroud)
可能的值是:
always|non_null|non_absent|non_default|non_empty
Run Code Online (Sandbox Code Playgroud)
更多:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper
这将在Spring Boot 2.0.3+和Jackson 2.0+中运行
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ApiDTO
{
// your class variable and
// methods
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
546691 次 |
| 最近记录: |