废话不多说,上干货!
最近因工作需要研究服务端数据字典转换工具,通过百度一通搜索,看到几种不同的实现方式,感觉其中有几种方式让我眼前一亮!
第一种直接通过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
最新评论