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

  在實際開發過程當中,爲了更優雅的進行先後端交互,有時候前端只須要非空字段,而且但願有必定的順序和枚舉類字段的含義轉換(例如:某字段在數據庫保存的是一個數字,指望返回給前端的是這個數字的含義)前端

解決方案:java

1)、實體類上使用@JsonInclude過濾爲空的字段數據庫

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

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);
  }
}

處理後的效果以下:ide

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

相關文章
相關標籤/搜索