介绍
trans 字典翻译,例如返回值有用户id,还需要给前端返回用户名等信息,和第三方框架如Easy-Trans,crane4j类似,但是更加简化,基于@JsonSerialize方式只对http响应输出有效, 核心代码来源于 RuoYi-Vue-Plus 代码在此基础上进行微调和二次封装。
依赖库
名称 | 描述 |
---|---|
zebra-common-util | |
lombok |
快速开始
引入
xml
<dependency>
<groupId>io.github.zhanghongbin</groupId>
<artifactId>zebra-spring-boot-starter-trans</artifactId>
</dependency>
Trans 注解
名称 | 类型 | 描述 |
---|---|---|
translationClass | Class | 需要实现 Translation接口,并且需要注解@Component,默认为DefaultDictTranslation.class |
alias | String | 默认为空,如果为空,则使用当前注解上字段的名称,并把原来值覆盖掉 |
readConverterExp | String | 转换表达式,默认为空,示例:0=男,1=女,2=未知 用于 translationClass=DefaultDictTranslation.class |
isFlat | boolean | 是否平铺 用于map,默认为false,如果为 true并且 translationClass 对象方法返回值是Map才进行平铺 |
Translation 泛型接口
名称 | 描述 |
---|---|
default void init(Object result) | 主要用于性能优化,通常情况下此方法把查询结果需要的字段汇总后进行统一查询或rpc,并保存到ThreadLocal或 Request |
T translation(String key, String readConverterExp, Object value) | key 为字段名称,readConverterExp 为表达式,不是必须,value 字段值 |
字典翻译
框架提供了默认的 translation 实现方式基于字典翻译 DefaultDictTranslation。可以在 readConverterExp填写 0=男,1=女,2=未知 ,详情请看示例
示例
首先实现Translation接口,并注解@Component,在deptId字段上注解@Trans,前端输出会多一个字段deptName
java
@Component
public class DeptNameTranslationImpl implements Translation<String> {
private final ISysDeptService sysDeptService;
@Override
public String translation(String key, String readConverterExp, Object value) {
return sysDeptService.selectDeptNameByIds(value.toString());
}
}
@Data
public class SysUserDto implements Serializable {
/**
* 用户ID
*/
private String userId;
//格式为 0=男,1=女,2=未知 sex为1,sexDesc值为女
@Trans(readConverterExp = "0=男,1=女,2=未知", alias = "sexDesc")
private int sex = 1;
/**
* 部门ID
*/
@Trans(translationClass = "DeptNameTranslationImpl.class", alias = "deptName")
private Long deptId;
/**
* 用户账号
*/
private String userName;
/**
* 密码
*/
@JsonIgnore
private String password;
}