jackson-annotations之@JsonInclude、@JsonPropertyOrder、@JsonSerialize


  在實際開發過程中,為了更優雅的進行前后端交互,有時候前端只需要非空字段,並且希望有一定的順序和枚舉類字段的含義轉換(例如:某字段在數據庫保存的是一個數字,期望返回給前端的是這個數字的含義)

解決方案:

1)、實體類上使用@JsonInclude過濾為空的字段

2)、實體類上使用@JsonPropertyOrder對字段進行排序

3)、在需要轉換的字段上使用@JsonSerialize並自定義json序列化,如果使用的是Mybatis-plus框架還有另一種解決方案,下一章演示

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.sand.base.util.json.serializer.DataScopeSerializer;import java.util.Date;

/**
 * 功能說明:系統角色
 * 開發人員:@author liusha
 * 開發日期:2019/8/30 13:10
 * 功能描述:系統角色
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"roleId", "roleName", "roleKey", "orderNum", "status", "delFlag", "dataScope"})
public class SysRole {
  private static final long serialVersionUID = 9084971943250909716L;
  /**
   * 創建者
   */
  private String createBy;
  /**
   * 更新者
   */
  private String updateBy;
  /**
   * 創建時間
   */
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  private Date createTime;

  /**
   * 更新時間
   */
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  private Date updateTime;

  /**
   * 備注信息
   */
  private String remark;
  /**
   * 角色ID
   **/
  private String roleId;
  /**
   * 角色名稱
   **/
  private String roleName;
  /**
   * 權限字符串
   **/
  private String roleKey;
  /**
   * 顯示順序
   **/
  private int orderNum;
  /**
   * 角色狀態(0正常 1停用)
   **/
  private String status;
  /**
   * 刪除標志(0邏輯未刪除 1邏輯已刪除)
   **/
  private String delFlag;
  /**
   * 數據范圍(1:全部數據權限 2:自定數據權限 3:本部門數據權限 4:本部門及以下數據權限)
   **/
  @JsonSerialize(using = DataScopeSerializer.class)
  private String dataScope;

 /**省略get、set方法**/ }

自定義json序列化DataScopeSerializer.class

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

/**
 * 功能說明:角色數據范圍json序列化
 * 開發人員:@author liusha
 * 開發日期:2019/9/1 18:24
 * 功能描述:角色數據范圍json序列化
 */
public class DataScopeSerializer extends JsonSerializer<String> {
  @Override
  public void serialize(String dataScope, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
    String dataScopeStr;
    switch (dataScope) {
      case "1":
        dataScopeStr = "全部數據權限";
        break;
      case "2":
        dataScopeStr = "自定數據權限";
        break;
      case "3":
        dataScopeStr = "本部門數據權限";
        break;
      case "4":
        dataScopeStr = "本部門及以下數據權限";
        break;
      default:
        dataScopeStr = "無此數據權限";
    }
    jsonGenerator.writeString(dataScopeStr);
  }
}

處理后的效果如下:

PS:關於jackson-annotations包其它API的使用可參考博文https://www.jianshu.com/p/939fe295d659


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM