@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> {
    @Override
    public 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
@Controller是Spring MVC中的注解,用于标注一个类是Controller,其作用是接收请求并处理业务逻辑,通常用于接收用户的请求并调用Service层来处理业务逻辑。@Controller注解会自动将该类注册为Spring容器中的Bean,可以使用@Autowired或@Resource等注解来注入其他Bean。 @Controller中定义的处理请求的方法(如@RequestMapping注解标识的方法)的返回值通常有以下几种类型: 1. ModelAndView对象:ModelAndView是Spring MVC中最常用的返回类型,其作用是封装要返回的数据和视图名称,可以通过addObject()方法将数据添加到ModelAndView中,也可以通过.setViewName()方法设置视图名称。 2. String类型:String类型的返回值通常表示返回的视图名称,Spring MVC会自动根据视图名称找到对应的视图。 3. void类型:void类型的返回值表示不需要返回任何数据,也不需要跳转到任何视图,通常用于处理Ajax请求等。 4. 其他类型:除了上述三种类型外,还可以返回其他类型的数据,例如JSON格式的数据,Spring MVC会自动将其转换成JSON格式的响应返回给客户端。 值得注意的是,对于返回String类型或void类型的方法,如果没有使用@ResponseBody注解,Spring MVC会自动将其视为返回视图名称,即调用ViewResolver来解析视图。如果使用@ResponseBody注解,则Spring MVC会自动将返回值转换成JSON格式的响应,这适用于处理Ajax请求等场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邓不利东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值