最近看到有人使用这几个注解,就稍微了解了一下各自的用法,发现枚举在前后台传值,DB和entity之间的映射很方便
1.使用@JsonCreator,可以将前台的属性值直接转换为枚举类型
2.@EnumValue 将枚举中的指定的值直接存储到数据库,不需要再手动转换
3.@JsonValue 后台返回前台数据时也不需要转换,可以直接返回指定的值
案例:
-
User实体
@TableName("user") @Data public class User { private Integer id; private String name; private Integer age; private SexEnum sex; }
-
枚举类
@Getter public enum SexEnum { MALE(1,"男"), FEMALE(2,"女"); @EnumValue //数据库中直接存入枚举属性val的值 private int val; @JsonValue //序列化枚举对象时,返回其属性desc的值 private String desc; SexEnum(int val, String desc) { this.val = val; this.desc = desc; } /** * 1.通过属性desc获取对应的枚举 * 2.JsonCreator加在构造方法或者静态方法上,为对象的反序列化指定构造逻辑 * 3.前端向后台传输json参数,json反序列化成对象时会自动调用这个方法 */ @JsonCreator public static SexEnum fromDesc(String desc) { System.out.println("进入枚举自定义构造方法"); for(SexEnum sexEnum : SexEnum.values()) { if(sexEnum.getDesc().equals(desc)) { return sexEnum; } } return null; } }
-
请求类
@RequestMapping("/getUser") @ResponseBody public User getUser(User u) { //返回数据给前台时,序列化对象时,其中的枚举类型会根据@JsonValue指定的字段进行处理 User user = userService.getUser(); return user; } @RequestMapping("/save_user") @ResponseBody public String saveUser(@RequestBody User u) { //前台传入Sex字符串,直接转换为枚举对象 // json反序列化时自动调用了SexEnum中的fromDesc()获取枚举对象,然后赋值给u中的sex userService.saveUser(u); return "success"; }
效果图
- postman中的入参,一定要使用json格式,使用表单无效果
- 看到控制台打印了一句话,说明反序列化枚举对象时,使用了我们自定义的方法
- 可以看到sex属性中的值前端传入的值‘男’,但是后台接收到为SexEnum的”MALE”
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
一、快速排序(Quick Sort) 快速排序采用分治法。首先从数列中挑出一个元素作为中间值。依次遍历数据,所有比中间值小的元素放在左边,所有比中间值大的元素放在右边。然后按此方法对左右两个子序列分别进行递归操作,直到所有数据有序。最理想的情况是,每次划分所选…