java---枚举

230 阅读1分钟

1.用枚举类型接收前端请求参数(返回前端对应的字段也需要用枚举类型)

@Data
public class StudentForm implements Serializable {
    private static final long serialVersionUID = 1L;
    private Integer no;
    private String name;
    // 枚举
    private SexEnum sex;
}

2. 枚举具体实现

package com.my.demo.model.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.apache.commons.lang.StringUtils;

@Getter
@AllArgsConstructor
@NoArgsConstructor
public enum SexEnum {
    MALE("1","男"),
    FEMALE("2","女")
    ;
    /**
     * EnumValue 指定入库字段,入表中的值 "1" / "2"
     * JsonValue 返回前端字段,只返回给前端 sex: "男" / "女"
     * JsonCreator 反序列化,静态方法参数名不要和已有属性同名,此时前端传入 sex:"1" / "2"
     */
    @EnumValue
    private String code;
    @JsonValue
    private String text;
    @JsonCreator
    public static SexEnum fromString(String value){
        for (SexEnum e: values()) {
            if(StringUtils.equals(e.getCode(), value)){
                return e;
            }
        }
        throw new RuntimeException();
    }
}

3.表对应的实体

@Data
@TableName("student")
public class Student extends BaseDo {
    @TableId(value = "id", type= IdType.AUTO)
    private Integer id;
    private Integer no;
    private String name;
    // 也必须用枚举类型
    private SexEnum sex;
    private BigDecimal money;
    private String isDelete;
}

4.配置枚举扫描(不可缺少的步骤)

mybatis-plus.type-enums-package=com.my.demo.model.enums

5.优势: 逻辑层直接判断 + 接收前端数据/返回给前端/入表都不用再转化

form.getSex() == SexEnum.MALE