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

返回枚举类给前端

1. 前言

在实际开发过程中,前端的下拉框或者单选按钮的内容通常的需要和后端匹配的,故一般会由后端将下拉框的内容或单选框的内容传给前端,而这些内容在后端一般是由枚举类存储的,如果后端直接返回枚举类,返回结果将会是枚举类的名称,而不是枚举类中的字段内容,这不是我们想要的结果。

2. 示例代码:

2.1 controller

package com.suhuamo.test.controller;import com.suhuamo.test.enums.OpenStatusEnum;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author suhuamo* @date 2024-05-26* @slogan U R MY SPECIAL* @description*/
@RestController
@RequestMapping("/test")
public class TestController {/*** 获取当前开关状态* @return OpenStatusEnum* {@link com.suhuamo.test.enums.OpenStatusEnum}* @version 1.0* @author suhuamo*/@GetMapping("/open-status/now")public OpenStatusEnum getOpenStatus(){return OpenStatusEnum.OPEN;}
}

2.2 enum代码

package com.suhuamo.test.enums;import lombok.Getter;/*** @author suhuamo* @date 2024-05-26* @slogan 五秒钟内说出三个你爱的人的名字...5..4..3..2..1..你是不是没有说自己,也要爱自己哦。* @description 开关状态枚举类*/
@Getter
public enum OpenStatusEnum {CLOSE(0, "关闭"),OPEN(1, "开启");/*** 类型*/private final Integer type;/*** 描述*/private final String desc;OpenStatusEnum(Integer type, String desc) {this.type = type;this.desc = desc;}public Integer getType() {return type;}public String getDesc() {return desc;}/*** 根据类型获取枚举,当无该类型时,返回null** @param type* @return OpenStatus*/public static OpenStatusEnum getByType(Integer type) {for (OpenStatusEnum itemEnum : OpenStatusEnum.values()) {if (itemEnum.getType().equals(type)) {return itemEnum;}}return null;}
}

3. 目前输出效果

在浏览器中输入:localhost:{端口}/test/open-status/now即可访问。【我配置的项目端口是8888,故端口输入的是8888
image.png

4. 解决办法

在枚举类上添加注解 @JsonFormat(shape = JsonFormat.Shape.OBJECT)
即枚举类的代码修改为:

package com.suhuamo.test.enums;import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;/*** @author suhuamo* @date 2024-05-26* @slogan 五秒钟内说出三个你爱的人的名字...5..4..3..2..1..你是不是没有说自己,也要爱自己哦。* @description 开关状态枚举类*/
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
@Getter
public enum OpenStatusEnum {CLOSE(0, "关闭"),OPEN(1, "开启");/*** 类型*/private final Integer type;/*** 描述*/private final String desc;OpenStatusEnum(Integer type, String desc) {this.type = type;this.desc = desc;}public Integer getType() {return type;}public String getDesc() {return desc;}/*** 根据类型获取枚举,当无该类型时,返回null** @param type* @return OpenStatus*/public static OpenStatusEnum getByType(Integer type) {for (OpenStatusEnum itemEnum : OpenStatusEnum.values()) {if (itemEnum.getType().equals(type)) {return itemEnum;}}return null;}
}

5. 解决后输出效果

image.png

6. 复盘结论

  1. 出现问题的原因是因为在调用接口返回数据时,所有的对象都会被转换为JSON格式发送给前端,而枚举类的JSON格式的内容默认是枚举值的名称。
  2. 加上注解@JsonFormat(shape = JsonFormat.Shape.OBJECT)就可以解决问题的原因是因为在转换JSON格式时,带有该注解可以将对象按照对象的形式进行序列化,即**<字段名称,字段内容>**的键值对形式进行序列化。
  3. 附带的问题就是反序列化会出现问题,即存入Redis时没问题,但是取出有问题的。【故建议不要存Redis
http://www.lryc.cn/news/354182.html

相关文章:

  • A. Maximize?
  • RBAC 动态权限
  • c语言:模拟strlen(三种方法)最全版本
  • 线性模型--普通最小二乘法
  • 移动云以深度融合之服务,令“大”智慧贯穿云端
  • 簡述vue常用指令
  • 【建议收藏】用AI快速生成一个网页(名侦探柯南~灰原哀主题网页),适合大学生web期末大作业
  • 用c++用4个凸函数(觉得啥好用用啥)去测试adam,rmsprop,adagrad算法的性能(谁先找到最优点)
  • AJAX初级
  • 重载大于号运算符,比较复数大小
  • go ast语义分析实现指标计算器
  • 【Vue】组件间传参与方法调用
  • 类和对象2
  • Linux系统命令traceroute详解(语法、选项、原理和实例)
  • 中兴通讯助力中国移动,推动SPN AI节能技术于23省规模部署
  • SQL Server--死锁
  • 中科蓝讯AB32VG1中文寄存器说明GPIO端口操作
  • 如何查看热门GPT应用?
  • C++中的各种定义
  • Java面向对象-常用类(日期时间类)
  • Shell环境变量深入:自定义系统环境变量
  • 【C++课程学习】:命名空间的理解(图文详解)
  • 鸿蒙ArkUI-X平台差异化:【运行态差异化(@ohos.deviceInfo)】
  • 蓝牙Mesh模块组网时无线回程影响速率吗?
  • 将3D检测的box框投影到BEV图片上
  • Flutter 中的 ClipOval 小部件:全面指南
  • ubuntu 硬盘转移
  • three.js中使用CameraHelper来可视化调整阴影相机的范围
  • Golang发送GET请求并设置查询参数
  • c++笔记3