一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 基于@JsonSerialize和@JsonInclude注解使用方法

基于@JsonSerialize和@JsonInclude注解使用方法

2022-02-19 14:39Jesslili Java教程

這篇文章主要介紹了@JsonSerialize和@JsonInclude注解使用方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@JsonSerialize和@JsonInclude注解

@JsonSerialize

后端開發時返回給前端的數據格式有時可能并不符合。

舉個例子,比如一張表中的時間,數據庫中存儲的是yyy-mm-dd hh:mm:ss 這樣的形式,而前段需要的是精確到秒的格式,這是就會出現問題。此時可以利用@JsonSerialize注解,改變返回給前端的json格式

@JsonSerialize注解,主要用于數據轉換,該注解作用在該屬性的getter()方法上。

使用步驟

1. 指定一個格式化的類

里面寫好規則

//JsonSerializer<Integer>:Integer為要轉換的類型
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 = "狀態信息不符合";
      }
      jsonGenerator.writeString(statusStr);
  }
}

//JsonSerializer<Date>:Date為要轉換的類型
public class Date2LongSerializer extends JsonSerializer<Date> {
  @Override
  public 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;
  List<OrderDetail> orderDetailList;//null,不返回
}

如果多個類都需要不返回null,挨個加注釋太麻煩了,可以全局設置,更改配置文件application.yml

spring:
jackson:
  default-property-inclusion: non_null

如果List<OrderDetail> orderDetailList;需要返回一個空的list,但不能返回null,可以直接初始化

List<OrderDetail> orderDetailList = new ArrayList<>();

基于@JsonSerialize和@JsonInclude注解使用方法

同樣若要返回空字符而不是null,初始化

private String msr = "";
private String data;

基于@JsonSerialize和@JsonInclude注解使用方法

 

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這個注解已經被棄用了~

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/myjess/article/details/106491091

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人刺激视频在线观看 | 私人影院免费 | 精品国内自产拍在线视频 | 秋霞理论一级在线观看手机版 | 猛男深夜狂cao小男生 | 和肥岳在厨房激情 | 日本公与妇中文在线 | 青青草视频国产 | 日韩a一级欧美一级 | 91中文字幕yellow字幕网 | 亚洲卡一卡2卡三卡4卡无卡三 | 国产成人在线影院 | 暖暖中国免费观看高清完整版 | 国产91在线精品 | 国产精品视频人人做人人爱 | 亚洲国产99在线精品一区69堂 | 青青青国产手机在线播放 | 国产精品资源在线观看 | 日本在线精品视频 | 热99re久久精品国产 | 成人免费播放 | 日本欧美强乱视频在线 | 亚洲 日韩经典 中文字幕 | 久久久久伊人 | 久久囯产精品777蜜桃传媒 | 放荡护士玩3p口述 | 超级碰碰免费视频 | 国产精品日韩欧美在线 | 污小说在线阅读 | 欧美日韩精品一区二区三区视频 | 欧美日韩高清不卡一区二区三区 | 日韩欧美推理片免费看完整版 | 超91精品手机国产在线 | 日本免费一区二区三区a区 日本免费三片在线观看 | 香港三级浴室女警官 | 天堂69亚洲精品中文字幕 | 很黄的孕妇a级黄毛片 | 亚洲欧美在线免费 | 电车痴汉(han) | 国产高清不卡视频在线播放 | 国产精品1页 |