基于@JsonSerialize和@JsonInclude注解使用方法
目录
- @JsonSerialize和@JsonInclude注解
- @JsonSerialize
- 使用步骤
- @JsonInclude
- JSON @JsonSerialize 弃用问题解决方案
@JsonSerialize和@JsonInclude注解
@JsonSerialize
后端开发时返回给前端的数据格式有时可能并不符合。
举个例子,比如一张表中的时间,数据库中存储的是yyy-mm-dd hh:mm:ss 这样的形式,而前段需要的是精确到秒的格式,这是就会出现问题。此时可以利用@JsonSerialize注解,改变返回给前端的json格式
@JsonSerialize注解,主要用于数据转换,该注解作用在该属性的getter()方法上。
使用步骤
1. 指定一个格式化的类
里面写好规则
//JsonSerializer:Integer为要转换的类型public class MySerializerUtils extends JsonSerializer {@Overridepublic void serialize(Integer status, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {String statusStr = ""; switch (status) {case 0:statusStr = "暂存"; break; case 1:statusStr = "待上报"; break; case 2:statusStr = "待审核"; break; case 3:statusStr = "已审"; break; case 4:statusStr = "退回"; break; case -1:statusStr = "已删"; break; default:statusStr = "状态信息不符合"; }jsonGenerator.writeString(statusStr); }}
或
//JsonSerializer:Date为要转换的类型public class Date2LongSerializer extends JsonSerializer {@Overridepublic void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {jsonGenerator.writeNumber(date.getTime() / 1000); }}
2. 在实体类中在要转换的字段上加上该注解
@JsonSerialize(using = MySerializerUtils.class)private int status;
或
//创建时间@JsonSerialize(using = Date2LongSerializer.class)private Date creatTime; //更新时间@JsonSerialize(using = Date2LongSerializer.class)private Date updateTime;
@JsonInclude
返回前端的实体类中如果某个字段为空的话那么就不返回这个字段了
所以将@JsonInclude(Include.NON_NULL) 这个注解放在类头上就可以解决。 实体类与json互转的时候属性值为 null 的不参与序列化
JsonJsonInclude.Include.ALWAYS这个是默认策略,任何情况下都序列化该字段,和不写这个注解是一样的效果。
@Data@JsonInclude(JsonInclude.Include.NON_NULL)public class OrderDTO {private String orderId; private String buyerName; private String buyerPhone; private String buyerAddress; private String buyerOpenid; ListorderDetailList; //null,不返回}
【基于@JsonSerialize和@JsonInclude注解使用方法】如果多个类都需要不返回null,挨个加注释太麻烦了,可以全局设置,更改配置文件application.yml
spring:jackson:default-property-inclusion: non_null
如果List
ListorderDetailList = new ArrayList<>();
文章图片
同样若要返回空字符而不是null,初始化
private String msr = ""; private String data;
文章图片
JSON @JsonSerialize 弃用问题解决方案 @JsonSerialize弃用spring boot中,返回json默认是包含空串的,如果我们不想让json返回null值,可以在bean上添加一些注解。
@JsonInclude(JsonInclude.Include.NON_EMPTY)??
后面的枚举值可以为
ALWAYS,NON_NULL, // 属性为NULL 不序列化,就是为null的字段不参加序列化NON_ABSENT, // 属性为默认值不序列化NON_EMPTY, // 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量NON_DEFAULT,CUSTOM,USE_DEFAULTS;
调用
@JsonInclude(JsonInclude.Include.NON_EMPTY)public class MsgBean {}
Ps:好多资料上说的@JsonSerialize这个注解已经被弃用了~
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- 急于表达——往往欲速则不达
- 第三节|第三节 快乐和幸福(12)
- 20170612时间和注意力开销记录
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 对称加密和非对称加密的区别
- 眼光要放高远
- 樱花雨
- 前任
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 2020-04-07vue中Axios的封装和API接口的管理