学校网站建设制度,北京建筑设计网站,专门做母婴的网站,有没有专门做针织衫的网站1.场景项目开发中给前端提供查询接口时#xff0c;经常遇到需要将从数据库中取出来的字段值做一层重新封装。比如数据库中存的状态值是数字#xff0c;返回给前端的时候#xff0c;前端并不知道这个数值代表什么意思。此时#xff0c;有两种方式#xff1a;#xff08;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 JsonSerializerInteger {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;
}