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

posted @ 2019-09-01 19:15  聚散彡流沙  阅读(2071)  评论(0编辑  收藏  举报