基于@JsonSerialize和@JsonInclude注解使用方法
@JsonSerialize和@JsonInclude注解
@JsonSerialize
后端開發(fā)時返回給前端的數(shù)據(jù)格式有時可能并不符合。
舉個例子,比如一張表中的時間,數(shù)據(jù)庫中存儲的是yyy-mm-dd hh:mm:ss 這樣的形式,而前段需要的是精確到秒的格式,這是就會出現(xiàn)問題。此時可以利用@JsonSerialize注解,改變返回給前端的json格式
@JsonSerialize注解,主要用于數(shù)據(jù)轉(zhuǎn)換,該注解作用在該屬性的getter()方法上。
使用步驟
1. 指定一個格式化的類
里面寫好規(guī)則
//JsonSerializer<Integer>:Integer為要轉(zhuǎn)換的類型
public class MySerializerUtils extends JsonSerializer<Integer> {
@Override
public 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 = "狀態(tài)信息不符合";
}
jsonGenerator.writeString(statusStr);
}
}
或
//JsonSerializer<Date>:Date為要轉(zhuǎn)換的類型
public class Date2LongSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeNumber(date.getTime() / 1000);
}
}
2. 在實體類中在要轉(zhuǎn)換的字段上加上該注解
@JsonSerialize(using = MySerializerUtils.class) private int status;
或
//創(chuàng)建時間 @JsonSerialize(using = Date2LongSerializer.class) private Date creatTime; //更新時間 @JsonSerialize(using = Date2LongSerializer.class) private Date updateTime;
@JsonInclude
返回前端的實體類中如果某個字段為空的話那么就不返回這個字段了
所以將@JsonInclude(Include.NON_NULL) 這個注解放在類頭上就可以解決。 實體類與json互轉(zhuǎn)的時候?qū)傩灾禐?null 的不參與序列化
JsonJsonInclude.Include.ALWAYS這個是默認(rèn)策略,任何情況下都序列化該字段,和不寫這個注解是一樣的效果。
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class OrderDTO {
private String orderId;
private String buyerName;
private String buyerPhone;
private String buyerAddress;
private String buyerOpenid;
List<OrderDetail> orderDetailList;//null,不返回
}
如果多個類都需要不返回null,挨個加注釋太麻煩了,可以全局設(shè)置,更改配置文件application.yml
spring:
jackson:
default-property-inclusion: non_null
如果List<OrderDetail> orderDetailList;需要返回一個空的list,但不能返回null,可以直接初始化
List<OrderDetail> orderDetailList = new ArrayList<>();
同樣若要返回空字符而不是null,初始化
private String msr = ""; private String data;

JSON @JsonSerialize 棄用問題解決方案
@JsonSerialize棄用spring boot中,返回json默認(rèn)是包含空串的,如果我們不想讓json返回null值,可以在bean上添加一些注解。
@JsonInclude(JsonInclude.Include.NON_EMPTY)
后面的枚舉值可以為
ALWAYS, NON_NULL, // 屬性為NULL 不序列化,就是為null的字段不參加序列化 NON_ABSENT, // 屬性為默認(rèn)值不序列化 NON_EMPTY, // 屬性為 空("") 或者為 NULL 都不序列化,則返回的json是沒有這個字段的。這樣對移動端會更省流量 NON_DEFAULT, CUSTOM, USE_DEFAULTS;
調(diào)用
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MsgBean {}
Ps:好多資料上說的@JsonSerialize這個注解已經(jīng)被棄用了~
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解
這篇文章主要為大家介紹了Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11

