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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 嫩草视频在线观看免费 | 日韩欧美亚洲国产高清在线 | 荡娃艳妇系列小说 | 亚洲成人91 | 四虎视屏 | 亚洲国产在线午夜视频无 | 成人国产精品一区二区不卡 | 99热这里只有精品久久免费 | 秋霞网毛片 | 白丝萝莉h| 国产午夜久久精品 | 视频二区 素人 制服 国产 | 国产好痛疼轻点好爽的视频 | 日韩一级片在线观看 | 男插女的下面免费视频夜色 | 日本视频免费在线播放 | 四虎影院的网址 | 亚洲精品国产专区91在线 | 欧美一级v片 | 国产一区二区免费不卡在线播放 | yy6080久久国产伦理 | 俄罗斯三级在线观看级 | 男人最爱看的网站 | 国产精品久久久精品视频 | 精品久久久久久久久久香蕉 | 欧美日韩亚洲高清不卡一区二区三区 | 日产乱码卡1卡2卡三免费 | 精品久久一 | 精品一区二区国语对白 | 欧美日韩国产一区二区三区在线观看 | 欧美日韩综合网在线观看 | 99免费视频 | 日本免费一区二区三区 | 四虎国产欧美成人影院 | brazzers欧美教师 | 国产一区日韩二区欧美三区 | 久久99re8热在线播放 | 国产精品久久国产精品99盘 | 亚洲美女啪啪 | 国产精品区牛牛影院 | 亚洲国产影院 |