@EnumValue 和 @JsonValue使用说明

719 阅读2分钟

当SexEnum作为一个实体对象的属性时,那么该属性所映射的数据库字段就是@EnumValue作用的值 如果该实体对象返回到前端,那么该枚举属性对应的值就是@JsonValue修饰的字段

例子如下: 假设我们有一个 User 实体对象,其中包含一个 SexEnum 类型的属性 sex,该属性在数据库中以 sex_code 字段保存。我们可以使用注解 @EnumValue@JsonValue 来实现上述需求。

首先,定义一个 SexEnum 枚举类:

java
public enum SexEnum {
    @EnumValue("M")
    @JsonValue
    MALE("M", "Male"),
    
    @EnumValue("F")
    @JsonValue
    FEMALE("F", "Female");

    private final String code;
    private final String label;

    SexEnum(String code, String label) {
        this.code = code;
        this.label = label;
    }

    public String getCode() {
        return code;
    }

    public String getLabel() {
        return label;
    }
}

上面的枚举类中,我们使用了 @EnumValue 注解来指定在数据库中保存的值,也就是 sex_code 字段的值。同时,我们还使用了 @JsonValue 注解来指定在序列化为 JSON 格式时,该枚举属性的值应该是什么。

接下来,我们定义一个 User 实体类:

java
public class User {
    private String name;
    private SexEnum sex;

    // 省略构造方法和其他属性的 getter/setter
    
    public SexEnum getSex() {
        return sex;
    }
}

在上面的实体类中,我们将 sex 属性的类型设置为 SexEnum,这样它就可以使用 SexEnum 枚举类中定义的注解。

当我们将 User 对象返回到前端时,sex 属性会被序列化为 JSON 格式,其值将是 SexEnum 枚举类中使用 @JsonValue 注解标注的字段的值,也就是 MALE 或者 FEMALE

当我们将前端传来的 JSON 数据反序列化为 User 对象时,sex 属性会根据 SexEnum 枚举类中使用 @EnumValue 注解标注的值来进行匹配,并赋予相应的枚举值。

通过使用 @EnumValue@JsonValue 注解,我们可以在数据库存储和前后端交互过程中实现枚举值的自定义映射。