数据字典设置为枚举的用法
来源:互联网 发布:mac os sierra 10.13 编辑:程序博客网 时间:2024/05/28 23:22
原先我们的应用中,将一个实体的状态声明为Integer(int)类型,然后在对其赋值的时候是使用一个类或接口在其中定义相应的值,在代码其他地方引用对状态进行赋值,例如:
package com.sunlight.warehouse.util;public class WareHouseConstant { //保管区 public static final Integer AREA_CATE_GORY1 = 1; //问题区 public static final Integer AREA_CATE_GORY2 = 2; //检验区 public static final Integer AREA_CATE_GORY3 = 3;}
@RequestMapping(method = RequestMethod.GET, value = "/{warehouseId}/storageAreaLocations")public ResponseData getStorageAreaLocations(@PathVariable("warehouseId") Integer wareHouseId, Integer sparePartId, String locationCode) { List<LocationsVO> locationsVos = warehouseService.getWareHouseAreaByWareHouseId(wareHouseId, WareHouseConstant.AREA_CATE_GORY1); return RespUtil.make(HttpStatus.OK.value(), HttpStatus.OK.getReasonPhrase(),locationsVos);}
现在需要我们在应用中将其改为枚举的方式,需要修改的地方如下:1、定义枚举类
package com.sunlight.storage.in.domain.enums;/** * 配件入库计划单状态枚举 * @author niufan */public enum PartsInBoundPlanStatusEnum { NEW(1), PART_CHECKED(2), CHECKED(3), TERMINATION(4); private Integer value; PartsInBoundPlanStatusEnum(Integer value) { this.value = value; } public static PartsInBoundPlanStatusEnum parseOfValue(Integer value){ PartsInBoundPlanStatusEnum partsInBoundPlanStatusEnum; if(value != null){ switch (value) { case 1: partsInBoundPlanStatusEnum = PartsInBoundPlanStatusEnum.NEW; break; case 2: partsInBoundPlanStatusEnum = PartsInBoundPlanStatusEnum.PART_CHECKED; break; case 3: partsInBoundPlanStatusEnum = PartsInBoundPlanStatusEnum.CHECKED; break; case 4: partsInBoundPlanStatusEnum = PartsInBoundPlanStatusEnum.TERMINATION; break; default: partsInBoundPlanStatusEnum = null; } } else { partsInBoundPlanStatusEnum = null; } return partsInBoundPlanStatusEnum; } public static Integer valueOf(PartsInBoundPlanStatusEnum partsInBoundPlanStatusEnum) { return partsInBoundPlanStatusEnum == null ? null : partsInBoundPlanStatusEnum.value; }}
2、定义枚举转换类(数据字段值和实体类属性值的转换)
package com.sunlight.storage.in.domain.converter;import com.sunlight.storage.in.domain.enums.PartsInBoundPlanStatusEnum;import javax.persistence.AttributeConverter;/** * 配件入库计划单状态枚举转换 * @author niufan */public class PartsInBoundPlanStatusEnumConverter implements AttributeConverter<PartsInBoundPlanStatusEnum, Integer> { @Override public Integer convertToDatabaseColumn(PartsInBoundPlanStatusEnum attribute) { return PartsInBoundPlanStatusEnum.valueOf(attribute); } @Override public PartsInBoundPlanStatusEnum convertToEntityAttribute(Integer dbData) { return PartsInBoundPlanStatusEnum.parseOfValue(dbData); }}
3、修改实体类(将实体类中的字段类型改为对应的枚举类型,添加@Converter注解引用2中定义的枚举转换类)
@Basic@Column(name = "STATUS")@Convert(converter = PartsInBoundPlanStatusEnumConverter.class)@JSONField(serializeUsing = PartsInBoundPlanStatusEnumSerializer.class)public PartsInBoundPlanStatusEnum getStatus() { return status;}@JSONField(deserializeUsing = PartsInBoundPlanStatusEnumDeserializer.class)public void setStatus(PartsInBoundPlanStatusEnum status) { this.status = status;}
4、如果使用fastjson,那么需要为每个枚举类定义个性的序列化和反序列类
package com.sunlight.storage.in.domain.enums;import com.alibaba.fastjson.serializer.EnumSerializer;import com.alibaba.fastjson.serializer.JSONSerializer;import java.io.IOException;import java.lang.reflect.Type;/** * 配件入库计划单状态枚举序列化 * @author niufan */public class PartsInBoundPlanStatusEnumSerializer extends EnumSerializer { public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { serializer.out.writeInt(PartsInBoundPlanStatusEnum.valueOf((PartsInBoundPlanStatusE num) object)); }}package com.sunlight.storage.in.domain.enums;import com.alibaba.fastjson.parser.DefaultJSONParser;import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;import java.lang.reflect.Type;/** * 配件入库计划单状态枚举反序列化 * @author niufan */public class PartsInBoundPlanStatusEnumDeserializer implements ObjectDeserializer { @Override public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) { return (T) PartsInBoundPlanStatusEnum.parseOfValue(parser.getLexer().intValue()); } @Override public int getFastMatchToken() { return 0; }}
5、修改对应的VO
@JSONField(serializeUsing = PartsInBoundPlanStatusEnumSerializer.class)public PartsInBoundPlanStatusEnum getStatus() { return status;}@JSONField(deserializeUsing = PartsInBoundPlanStatusEnumDeserializer.class)public void setStatus(PartsInBoundPlanStatusEnum status) { this.status = status;}
1 0
- 数据字典设置为枚举的用法
- 枚举值当数据字典使用
- 为你的数据库做好数据字典
- 枚举型数据用法
- 【QTP】字典的用法
- 字典的基本用法
- 字典的基本用法
- 字典get的用法
- python 字典的用法
- 枚举类型的用法
- 枚举的用法
- 枚举 Enum 的用法
- enum(枚举)的用法
- 枚举的用法
- 枚举类的用法
- 枚举的用法
- 转载!!!枚举的用法
- 枚举类型的用法
- java.lang.UnsatisfiedLinkError: dlopen failed: /data/app/com.gkzxhn.prision-2/lib/arm/libosp.so: has
- 2017华为实习生招聘面试经历(IT应用软件 c++)
- Spring Boot入门教程
- MyBatis——XML映射文件—更新(Mapper XML文件——Insert ,Update,delete)
- js实验2.(7)消息框
- 数据字典设置为枚举的用法
- Okhttp:Fatal Exception: java.lang.IllegalArgumentException:unexpected char 0x0a at28 in header value
- NYOJ_714_Card Trick【队列】
- 币种金额转换
- [SMOJ1781]恐怖电影
- win7下Qt安装调试器
- 网络判断
- python:pandas模块中的DataFrame结构及常用操作
- [转]Ubuntu 16.04 一系列软件安装命令,包括QQ、搜狗、Chrome、vlc、网易云音乐安装方法