一、请求参数自动转换
@Getter
public enum UserType{
BACKEND(1, "后台"),
FRONT(2, "前台"),
;
@JsonCreator
UserType(Integer val, String desc) {
this.val = val;
this.desc = desc;
}
@EnumValue
private final Integer val;
@JsonValue
private final String desc;
}
@Data
@TableName("demo")
@Accessors(chain = true)
public class Demo {
@TableId
private Integer id;
private String name;
private Integer age;
private UserType userType;
}
@Api
@RequestMapping("/demo")
@RestController
public class DemoController {
@Resource
private DemoService demoService;
@ApiOperation("根据id获取数据")
@GetMapping("/{id}")
public R getById(@PathVariable Integer id) {
Demo demo = demoService.getById(id);
return R.ok(demo);
}
@ApiOperation("测试枚举")
@PostMapping("/testEnum")
public R testEnum(@RequestBody Demo demo) {
return R.ok(demo);
}
}
二、MyBatisPlus枚举转换
版本依赖
com.baomidou
mybatis-plus-boot-starter
3.2.0
yml配置
mybatis-plus:
#扫描,多个package用逗号或者分号分隔
typeEnumsPackage: com.taco.springcloud.*.enums
使用方法
使用枚举@EnumValue
@Getter
public enum UserType{
BACKEND(1, "后台"),
FRONT(2, "前台"),
;
@JsonCreator
UserType(Integer val, String desc) {
this.val = val;
this.desc = desc;
}
@EnumValue
private final Integer val;
@JsonValue
private final String desc;
}
实现接口IEnum
@Getter
public enum UserType implements IEnum {
BACKEND(1, "后台"),
FRONT(2, "前台"),
;
@JsonCreator
UserType(Integer val, String desc) {
this.val = val;
this.desc = desc;
}
private final Integer val;
@JsonValue
private final String desc;
@Override
public Integer getValue() {
return val;
}
}
三、可能存在的问题
如果数据库中使用的tinyint(1)那么在mybatis将会映射为boolean,使用Integer作为枚举类的值会映射失败,一值为Null
解决方法
使用tinyint(4),因为tinyint(1)和tinyint(4)占用的空间是一样,故没有影响。
在数据连接参数加上tinyInt1isBit=false