通用枚举的配置可以优化代码,增强代码的可读性
效果:插入时:前端传递枚举属性code值 0,1,2 或者 枚举字面量 或者枚举属性message值 下架,发布中,暂存,数据库保存0,1,2,查询时:返回json数据 下架,发布中,暂存。
①声明通用枚举属性,使用@EnumValue标记数据库存的值,使用@JsonValue标记响应前端json的值
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
@Getter
@Slf4j
public enum ReleaseStatusEnum {
DOWN(0, "下架"),
PUBLISHING(1, "发布中"),
TEMP_SAVE(2, "暂存");
ReleaseStatusEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
@EnumValue
private final Integer code;
@JsonValue
private final String message;
}
②配置扫描通用枚举,两种方式任选其一即可
mybatis-plus.type-enums-package=com.xxx.localdemo.web.*.* mybatis-plus.configuration.default-enum-type-handler=com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler
③如果使用枚举接收前端传递的参数,需要声明反序列化类继承JsonDeserializer<>,重写deserialize方法,使用@JsonDeserialize(using = ReleaseStatusEnum .Deserializer.class)标记反序列化规则。
public static class Deserializer extends JsonDeserializer{ @Override public ReleaseStatusEnum deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { String text = jsonParser.getText(); try { for (ReleaseStatusEnum releaseStatusEnum : ReleaseStatusEnum.values()) { if (releaseStatusEnum.getCode().equals(Integer.valueOf(text))) { return releaseStatusEnum; } } return null; } catch (Exception e) { log.warn("反序列化枚举类出错", e); return null; } } }
@JsonDeserialize(using = ReleaseStatusEnum.Deserializer.class)
private ReleaseStatusEnum releaseStatus;
效果如图:
前端参数转换
存入数据库的值
查询展示到前端的数据



