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