当前位置: 首页 > news >正文

@JsonSerialize—优雅地封装返回值

1.场景

项目开发中给前端提供查询接口时,经常遇到需要将从数据库中取出来的字段值做一层重新封装。比如数据库中存的状态值是数字,返回给前端的时候,前端并不知道这个数值代表什么意思。此时,有两种方式:

(1)前端那边维护一个枚举,负责翻译后端返回的值;

(2)后端直接翻译好返回给前端。

这里,笔者的这篇博客针对第二种方式,提供一种优雅的字段处理方式。

举例:

笔者这里有个查询任务列表的接口,返回的任务列表里任务的状态值是0、1、2这样的数值,需要将这些数值翻译成“待完成”“已完成”“已延期”这样的中文,并返回给前端。

2.自定义序列化类

首先自定义一个序列化类TaskStatusSerializer,继承 JsonSerializer 类,并重写serialize接口。

注意:JsonSerializer类后面的泛型,取决于被转换的数值的类型。由于状态值是 0、1、2 ,也就是Integer类型,所以这里的泛型T直接传入Integer。

代码如下所示:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;import java.io.IOException;/*** 任务状态序列化类** @author: dong* @date: 2023/2/20 21:11* @since: 1.0*/
public class TaskStatusSerializer extends JsonSerializer<Integer> {@Overridepublic void serialize(Integer value, JsonGenerator gen, SerializerProvider serializers) throws IOException {if (value == null) {gen.writeString("未知的任务状态");return;}switch (value) {case 0:gen.writeString("待完成");break;case 1:gen.writeString("已完成");break;case 2:gen.writeString("已延期");break;default:break;}}
}

3.添加@JsonSerialize

在返回给前端的VO类里的任务状态字段上添加@JsonSerialize注解,并设置属性using 的值。

按照如下方式设置:

也就是说,按照如下方式设置,taskStatus在返回给前端的时候会使用TaskStatusSerializer这个自定义的序列化类进行封装。

public class TaskManageVO {@JsonSerialize(using = TaskStatusSerializer.class)private Integer taskStatus;
}

http://www.lryc.cn/news/14209.html

相关文章:

  • 【Python网络编程】利用Python进行TCP、UDP套接字编程
  • fuzz测试之libfuzzer使用小结
  • 电子标签拣货系统——外接供电版
  • 为什么启动一个线程不用run()方法,而是用start()方法
  • Java File相关操作
  • LabVIEW利用矢量量化直方图开发人脸识别
  • RK3568工业开发板工控板说明
  • JavaScript Web API 来构建你不了解的网站
  • KeePass敏感信息明文传输漏洞复现 (CVE-2023-24055)
  • Android 11 中的权限更新
  • october-cms
  • 抖音怎样报白?报白需要审核哪些资料呢
  • Spring中的AOP
  • 文件系统与动静态库的基本了解
  • netty——IO、NIO、AIO进化之路
  • AI稳定生成图工业链路打造
  • 20230220华南金牌主板u盘启动
  • 测试团队都在用哪些不错的测试用例管理平台?盘点6大主流测试管理系统
  • linux 系统编程之线程
  • 从0开始学python -35
  • 1.14 golang中的结构体
  • 原创不易,坚持更难
  • 计算机网络 | 谈谈TCP的流量控制与拥塞控制
  • Flask入门(7):内置装饰器(钩子函数)
  • Java8新特性
  • 哈希表题目:设计哈希集合
  • java static关键字 万字详解
  • 光谱实验反射、透射光谱测量
  • 【基础算法】之 冒泡排序优化
  • Python | 线程锁 | 3分钟掌握【同步锁】(Threading.Lock)