枚举映射数据库字段

配置枚举包扫描路径

mybatis-plus:
# 扫描通用枚举
type-enums-package: com.xx.**.enums

方法一:@EnumValue 和 @JsonValue

在枚举中使用注解 @EnumValue 和 @JsonValue

  • 当SexEnum作为一个实体对象的属性时,那么该属性所映射的数据库字段就是@EnumValue作用的值
  • 如果该实体对象返回到前端,那么该枚举属性对应的值就是@JsonValue修饰的字段
@Getter
@AllArgsConstructor
public enum SexEnum implements BaseEnum {
MALE(1, "男"),
FEMALE(0, "女"),
UNKNOW(2, "未知")
;
@EnumValue
private final Integer code;
@JsonValue
private final String desc;
}

方法二:实现IEnum接口

  1. 重写getValue等同于使用@EnumValue注解,重写toString等同于使用@JsonValue注解
@AllArgsConstructor
@Getter
//IEnum<Integer> Inteter泛型表示映射到数据库的字段类型
public enum BusinessStatusEnum implements IEnum<Integer>{
FAIL(0, "失败"),
SUCCESS(1, "成功"),
; private final Integer code;
private final String desc; @Override
public Integer getValue() {
return code;
} @Override
public String toString() {
return this.desc;
} }
  1. 再配置一下jackson的反序列化枚举 write_enums_using_to_string
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
serialization:
write_enums_using_to_string: true

@RequestBody中枚举不匹配问题 空字符串转枚举异常

如果前端传的值是枚举中的字符串,进入后端会转换成枚举参与运行,存入数据库时会转换成字符串对应的数字。

但如果前端传入的是"",而不是null,因找不到对应的枚举值,匹配出现异常。

/**
* 枚举字段可以使用null、空字符串、非匹配的任意字符串进行传参,而不引发异常
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer { @Autowired
private ObjectMapper objectMapper; @PostConstruct
public void myObjectMapper() {
// 解决enum不匹配问题 默认值为false
objectMapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);
} }

其他情况

前端在调用增删改查接口的时候,传入类似 status='1',{'sex':1}之类的参数,那如何在这个接口接参(专业点说叫json反序列化)的过程中把魔法数字转换成枚举对象呢?

参见 如何在springboot优雅的使用枚举

Springboot中使用枚举的更多相关文章

  1. Springboot中使用Xstream进行XML与Bean 相互转换

    在现今的项目开发中,虽然数据的传输大部分都是用json格式来进行传输,但是xml毕竟也会有一些老的项目在进行使用,正常的老式方法是通过获取节点来进行一系列操作,个人感觉太过于复杂.繁琐.推荐一套简单的 ...

  2. 学习Spring Boot:(十二)Mybatis 中自定义枚举转换器

    前言 在 Spring Boot 中使用 Mybatis 中遇到了字段为枚举类型,数据库存储的是枚举的值,发现它不能自动装载. 解决 内置枚举转换器 MyBatis内置了两个枚举转换器分别是:org. ...

  3. SpringBoot中使用SpringDataJPA

    SpringDataJPA的使用 JPA是什么? JPA(Java Persistence API)是Sun官方提出的Java持久化规范. 为Java开发人员提供了一种对象/关联映射工具来管理Java ...

  4. springboot 中如何正确在异步线程中使用request

    起因: 有后端同事反馈在异步线程中获取了request中的参数,然后下一个请求是get请求的话,发现会偶尔出现参数丢失的问题. 示例代码: @GetMapping("/getParams&q ...

  5. SpringBoot中搭配AOP实现自定义注解

    1 springBoot的依赖 确定项目中包含可以注解的依赖 <dependency> <groupId>org.springframework.boot</groupI ...

  6. SpringBoot中yaml配置对象

    转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...

  7. 如何在SpringBoot中使用JSP ?但强烈不推荐,果断改Themeleaf吧

    做WEB项目,一定都用过JSP这个大牌.Spring MVC里面也可以很方便的将JSP与一个View关联起来,使用还是非常方便的.当你从一个传统的Spring MVC项目转入一个Spring Boot ...

  8. Python 中的枚举类型~转

    Python 中的枚举类型 摘要: 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期.月份.状态等. 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表 ...

  9. springboot中swaggerUI的使用

    demo地址:demo-swagger-springboot springboot中swaggerUI的使用 1.pom文件中添加swagger依赖 2.从github项目中下载swaggerUI 然 ...

  10. JavaScript中的枚举

    在JavaScript目前的版本中,没有枚举这个概念(当然,ECMA-262第三版中已经将enum作为关键字保留). 然而,如同JavaScript中没有class一样,但我们仍然可以通过间接的方式- ...

随机推荐

  1. Vue2+Cesium1.9+热力图开发笔记

    1.安装cesiumJS.heatmap.webpack插件依赖包: yarn install/npm install "dependencies": { ... "ce ...

  2. Tushare金融大数据开放社区 - 数据抽取案例学习

    进入平台介绍 扫码立即注册,更多大数据等你来探索 ! 案例: 导入tushare import tushare as ts 这里注意, tushare版本需大于1.2.10 设置token ts.se ...

  3. pandas通过sqlalchemy写入pgsql报错can't adapt type 'numpy.int64'

    其实以前也遇到过,后来不了了之,但今天又出现了,还是大概记录下. 我个人习惯按我自己的理解搞事情,只要结果对就行,但不一定对. 分析下原因,突然想到dataframe中有一列全是列表,列表中全是整数, ...

  4. Windows11 微软提供三种路径 安装程序应用

    Windows11 微软提供三种路径 安装程序应用

  5. div垂直居中的4种方式方式

    一.使用单元格居中 <!DOCTYPE html> <html> <head> <title>测试</title> </head> ...

  6. 记录自己在对订单进行按日期查询时使用的一种查询的方法,这里的orders是订单表,你也可以改成别的什么表对于最终数据不会造成影响,除非你那个表的数据只有几条那样就会出现查不到日期的情况

    SELECT @date := DATE_ADD(@date, INTERVAL + 1 DAY) days FROM ( SELECT @date := DATE_ADD("2019-06 ...

  7. Vulnhub 靶场 CORROSION: 2

    Vulnhub 靶场 CORROSION: 2 前期准备 下载地址:https://www.vulnhub.com/entry/corrosion-2,745/ 靶机地址:192.168.147.19 ...

  8. PNAS:微生物组分析揭示人类皮肤的独特性

    https://blog.csdn.net/woodcorpse/article/details/87989663

  9. cc1

    基础 cc接口及类介绍 Transformer接口 Defines a functor interface implemented by classes that transform one obje ...

  10. 【2】locust性能测试原理分析+登录测试脚本+总结

     login_per_test1.py #对登录功能进行单点性能测试(一组测试数据)#发送首页请求,通过locust进行性能测试from locust import HttpLocust,task,T ...