目录
1.创建实体类(学生实体,Sex枚举类)
@Data
@Table
@Entity
public class Student {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid",strategy = "org.hibernate.id.UUIDGenerator")
private String id;
private String name; // 姓名
private Sex sex; // 性别
}
使用@JsonValue来标记枚举想要返回的序列化值
注意:建议枚举的编码不要使用数字
public enum Sex { // 性别
GIRL("FM","女"),BOY("M","男");
private String code;
private String sName;
Sex(String code,String sName) {
this.code = code;
this.sName = sName;
}
public String getCode() {
return code;
}
/**
* 将数据库查询到编码自动转为文字返回给前端
*/
@JsonValue
public String getsName() {
return sName;
}
}
2.创建Converter(属性转换器)
@Converter
注解的作用是告诉JPA这是一个属性转换器
autoApply =true
的作用是表示这是一个全局
的属性转换器,也就是说这个转换器对所有的实体类都起作用
AttributeConverter
<需要被转换的enum,与数据库表字段对应的java类型>
@Converter(autoApply = true)
public class SexConverter implements AttributeConverter<Sex, String> {
/**
* 此方法告诉jpa,数据库里存的值,即插入和更新操作时执行;
*/
@Override
public String convertToDatabaseColumn(Sex sex) {
if(sex == null){
return null;
}
return sex.getCode(); // 此处存储的是编码
}
/**
* 此方法告诉Java从数据库里取出的值对应的是哪个enum值,即查询操作时执行。
*/
@Override
public Sex convertToEntityAttribute(String code) {
if(code == null){
return null;
}
for (Sex sex : Sex.values()) {
if(sex.getCode().equals(code)){
return sex; // 获取到当前Sex信息
}
}
throw new IllegalArgumentException(); // 或者给个默认的enum eg: return Category.UNKNOWN
}
}
3.创建controller层
@RestController
@RequestMapping("/student")
public class StudentController {
@Autowired private StudentRepo repo;
@PostMapping(path = "/save")
public Student save(@RequestBody Student student) {
repo.save(student);
return student;
}
@GetMapping(path = "/list")
public List<Student> list() {
return repo.findAll();
}
}
当需要在后端使用时,用此方法–>Sex.GIRL/Sex.BOY