注解实现字典值转换
1 背景
项目中对数据字典值、机构名称、创建人和更新人等编码值的转换方式一般通过关联特定表查询对应的name,
这样的查询效率低且对于不熟悉业务的新员工很不友好,因此想要开发通过注解实现编码值转换的功能
2 设计思路
通过在需要转换的字段上添加注解标识需要转换的字段,再通过fastjson的序列化完成对特定字段的处理
3 实现方式
通过继承WebMvcConfigurer进行统一的http请求信息管理,使用FastJsonHttpMessageConverter作为http消息转换类,
添加自定义的序列化类,完成注解字段的转换
maven依赖
<!-- fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.5</version>
</dependency>
3.1 注解
3.1.1 注解结构
注解@CodeValue如下所示
public @interface CodeValue {
/*** 编码类型 */
CodeType type() default CodeType.DICT;
/** 字典类型编码*/
DictType dictType() default DictType.DEFAULT;
/** 默认值*/
String defaultValue() default "";
/**
* @Description
* 扩展字段名,作为描述编码值的name字段,
* 不填时默认为编码字段加Name后缀
*/
String fieldName() default "";
}
type : 类型是CodeType ,代表的是编码值的类型,默认是字典类型
public enum CodeType {
DICT,
ORG,
USER;
}
dictType:类型是DictType,当CodeValue是DICT字典类型时,该字段表示的是字典类型的编码值,如性别SEX
public enum DictType {
DEFAULT("","空"),
PROVINCE("province","省份"),
SEX("sex","性别"),
IS_START("is_start","是否启动");
/** 字典类型编码 */
private String code;
/*** 描述*/
private String description;
}
defaultValue: 类型是String,该字段表示的是当注解的字段值为空时的默认值
3.1.2 使用方法
注解直接在字段上使用,如下所示
public class BussinessDTO implements Serializable {
// 转换字典类型不需要指定type字段,指定字典类型的枚举即可
@CodeValue(dictType = Dict