jackSon注解--@JsonInclude注解不返回null值字段
jackSon常⽤注解
字段注解:-- @JsonInclude 注解不返回null值字段
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class OrderDTO {
private String orderId;
@JsonProperty("name")
private String buyerName;
@JsonProperty("phone")
private String buyerPhone;
@JsonProperty("address")
private String buyerAddress;
@JsonProperty("openid")
private String buyerOpenid;
private BigDecimal orderAmount;
/**
* 订单状态,默认是0
*/
private Integer orderStatus;
/**
* ⽀付状态
*/
private Integer payStatus;
@JsonSerialize(using = Date2LongSerializer.class)
private Timestamp createTime;
@JsonSerialize(using = Date2LongSerializer.class)
private Timestamp updateTime;
@JsonProperty("items")
List<OrderDetailEntity> orderDetailList;
}
@JsonInclude(JsonInclude.Include.NON_NULL)表⽰,如果值为null,则不返回
全局jsckson配置
spring:
datasource:
driver-class-name: sql.jdbc.Driver
jpa:
show-sql: true
jackson:
default-property-inclusion: non_null # 全局jackson配置
JSON库 Jackson 常⽤注解介绍
Jackson JSON 框架中包含了⼤量的注解来让我们可以⼲预 Jackson 的 JSON 处理过程,
例如我们可以通过注解指定 java pojo 的某些属性在⽣成 json 时被忽略。。本⽂主要介绍如何使⽤ Jackson 提供的注解。Jackson注解主要分成三类,⼀是只在序列化时⽣效的注解;⼆是只在反序列化时候⽣效的注解;三是两种情况下都⽣效的注解。⼀: 两种情况下都有效的注解
1. @JsonIgnore 作⽤域属性或⽅法上
@JsonIgnore ⽤来告诉 Jackson 在处理时忽略该注解标注的 java pojo 属性,
不管是将 java 对象转换成 json 字符串,还是将 json 字符串转换成 java 对象。
@Data
public class SellerInfoEntity {
private String id;
private String username;
private String password;
private String openid;
@JsonIgnore
private Timestamp createTime;
@JsonIgnore
private Timestamp updateTime;
public SellerInfoEntity() {
}
public SellerInfoEntity(String id, String username, String password, String openid) { this.id = id;
this.username = username;
this.password = password;
this.openid = openid;
}
}
2. @JsonIgnoreProperties 作⽤在类上
@Data
@JsonIgnoreProperties(value = {"createTime","updateTime"})
public class SellerInfoEntity {
private String id;
private String username;
private String password;
private String openid;
private Timestamp createTime;
private Timestamp updateTime;
public SellerInfoEntity() {
}
public SellerInfoEntity(String id, String username, String password, String openid) { this.id = id;
this.username = username;
this.password = password;
this.openid = openid;
}
}
使⽤Spring Boot快速搭建Controller进⾏测试:
@RestController
@RequestMapping("/jackson")
public class TestJackson {
@RequestMapping("test1")
public Result test1(){
SellerInfoEntity entity = new SellerInfoEntity("1","user1","123456","openid");
return new Result(MyResultEnum.SUCCESS,entity);
}
}
访问: localhost/sell/jackson/test1
使⽤注解前:返回值
{
"code": 0,
"msg": "成功",
"data": {
"id": "1",
"username": "user1",
"password": "123456",
"openid": "openid",
"createTime": null,
"updateTime": null
}
}
使⽤注解后:返回值
{bigdecimal转换为integer
"code": 0,
"msg": "成功",
"data": {
"id": "1",
"username": "user1",
"password": "123456",
"openid": "openid",
}
}
3. @JsonIgnoreType
@JsonIgnoreType 标注在类上,当其他类有该类作为属性时,该属性将被忽略。
package org.lifw.jackosn.annotation;
import com.fasterxml.jackson.annotation.JsonIgnoreType;
@JsonIgnoreType
public class SomeOtherEntity {
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
public class SomeEntity {
private String name;
private String desc;
private SomeOtherEntity entity;
}
4. @JsonProperty
@JsonProperty 可以指定某个属性和json映射的名称。例如我们有个json字符串为{“user_name”:”aaa”},
⽽java中命名要遵循驼峰规则,则为userName,这时通过@JsonProperty 注解来指定两者的映射规则即可。这个注解也⽐较常⽤。
public class SomeEntity {
@JsonProperty("user_name")
private String userName;
// ...
}
⼆、只在序列化情况下⽣效的注解
1. @JsonPropertyOrder
在将 java pojo 对象序列化成为 json 字符串时,使⽤ @JsonPropertyOrder 可以指定属性在 json 字符串中的顺序。
2. @JsonInclude
在将 java pojo 对象序列化成为 json 字符串时,使⽤ @JsonInclude 注解可以控制在哪些情况下才将被注解的属性转换成 json,例如只有属性不为 null 时。
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SellerInfoEntity {
private String id;
private String username;
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private String password;
private String openid;
private Timestamp createTime;
private Timestamp updateTime;
public SellerInfoEntity() {
}
public SellerInfoEntity(String id, String username, String password, String openid) {
this.id = id;
this.username = username;
this.password = password;
this.openid = openid;
}
}
Controller 测试
@RestController
@RequestMapping("/jackson")
public class TestJackson {
@RequestMapping("test1")
public Result test1(){
SellerInfoEntity entity = new SellerInfoEntity("1","user1","","openid");
return new Result(MyResultEnum.SUCCESS,entity);
}
}
结果:
{
"code": 0,
"msg": "成功",
"data": {
"id": "1",
"username": "user1",
"openid": "openid"
}
}
上述例⼦的意思是 SellerInfoEntity 的所有属性只有在不为 null 的时候才被转换成 json,
如果为 null 就被忽略。并且如果password为空字符串也不会被转换.
该注解也可以加在某个字段上。
另外还有很多其它的范围,例如 NON_EMPTY、NON_DEFAULT等
三、是在反序列化情况下⽣效的注解
1. @JsonSetter
@JsonSetter 标注于 setter ⽅法上,类似 @JsonProperty ,也可以解决 json 键名称和 java pojo 字段名称不匹配的问题。
public class SomeEntity {
private String desc;
@JsonSetter("description")
public void setDesc(String desc) {
this.desc = desc;
}
}
上述例⼦中在将 json 字符串转换成 SomeEntity 实例时,会将 json 字符串中的 description 字段赋值给 SomeEntity 的 desc 属性。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。