目录
1、讲讲好处
在使用这种标准枚举模式编写业务逻辑时,可以直接通过枚举成员来表示状态,不需要担心底层的 value 或描述信息,使代码更简洁。
枚举类会 handles 序列化和反序列化的过程,确保:
所以我们只需要在业务代码中直接使用枚举成员,不需要做任何额外的处理,枚举类会负责与底层值的转换,使业务代码精简和高效。
2、例子
(1)枚举类:
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import com.tianji.common.enums.BaseEnum;
import lombok.Getter;
@Getter //使用@Getter注解自动生成getter方法
public enum SectionType implements BaseEnum { //实现BaseEnum接口,标识这是一个枚举类
VIDEO(1, "视频"),
EXAM(2, "考试"),
;
@JsonValue //把value值返回给前端(在JSON序列化时返回value的值)
@EnumValue //把枚举的value转成数据库需要的
int value;
String desc;
SectionType(int value, String desc) {
this.value = value;
this.desc = desc;
}
@JsonCreator(mode = JsonCreator.Mode.DELEGATING) //前端提交form表单,of方法:将value转变成对应的枚举
public static SectionType of(Integer value){
if (value == null) {
return null;
}
for (SectionType status : values()) {
if (status.equalsValue(value)) {
return status;
}
}
return null;
}
}
(2)DTO类:
当前端form表单提交数据给后端时,其中一个参数是这个枚举类中的枚举值。
此时后端通过DTO类来接收数据,其中定义一个成员属性,举个例子:
@Data
@ApiModel(description = "学习记录")
public class LearningRecordFormDTO {
@ApiModelProperty("小节类型:1-视频,2-考试")
@NotNull(message = "小节类型不能为空")
@EnumValid(enumeration = {1, 2}, message = "小节类型错误,只能是:1-视频,2-考试")
private SectionType sectionType;
}
3、根据上面例子进行具体讲解
这是一种典型的枚举类写法,具有以下几个特点: