数据字典实例详解(有趣的数据字典转换方式)

废话不多说,上干货!

最近因工作需要研究服务端数据字典转换工具,通过百度一通搜索,看到几种不同的实现方式,感觉其中有几种方式让我眼前一亮!

第一种直接通过entity属性的get方法进行数据字典转换

package com.star.user.model.vo; import com.star.enums.RoleEnum; import lombok.Builder; import lombok.Data; import lombok.Getter; import lombok.Setter; /** * 用户信息 * * @author: star * @date: 2022-02-06 */ @Builder public class UserInfoVo { /** * 用户名称 */ @Setter @Getter private String userName; /** * 角色 */ @Setter private String role; public String getRole(String role) { return RoleEnum.getTextByCode(Integer.parseInt(role)); } }

第二种方式是通过json序列化的时候转换,本例子使用的是fastjson

package com.star.dictionary; import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.ObjectSerializer; import com.alibaba.fastjson.serializer.SerializeWriter; import com.star.enums.RoleEnum; import org.springframework.stereotype.Component; import java.lang.reflect.Type; import java.util.Objects; /** * fastjson序列化 * * @author: star * @date: 2022-02-06 */ @Component public class DictionarySerializer implements ObjectSerializer { /** * fastjson序列化时数据字典转换 * * @param serializer * @param object * @param fieldName * @param fieldType * @param features */ @Override public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) { if (Objects.nonNull(object)) { SerializeWriter out = serializer.out; if (object instanceof Integer) { Integer code = (Integer) object; String name = RoleEnum.getTextByCode(code); out.writeString(name); } } } }

/** * 获取用户 * * @return UserVO 用户数据 */ @Override public UserVO getCurrentUserLocal() { return UserVO.builder().userName("猕猴桃").role(1).build(); }

package com.star.user.model.vo; import com.alibaba.fastjson.annotation.JSONField; import com.star.dictionary.DictionarySerializer; import com.star.enums.RoleEnum; import lombok.Builder; import lombok.Data; import java.io.Serializable; /** * 用户信息 * * @author: star * @date: 2022-02-06 */ @Data @Builder public class UserVO implements Serializable { /** * 用户名称 */ private String userName; /** * 角色 */ @JSONField(serializeUsing = DictionarySerializer.class) private Integer role; }

通过json序列化转换这个是比较方便,实现起来比较简单,优缺点比较明显。

数据字典实例

优点:代码简单,技术成本低,能很快就实现数据字典的转换。

缺点:无法新增一个属性来额外显示字典文本,因为采用json序列化统一的配置所以会影响正常的json转化成bean

您可以还会对下面的文章感兴趣

最新评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

使用微信扫描二维码后

点击右上角发送给好友