Skip to content

介绍

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 注解

名称类型描述
translationClassClass需要实现 Translation接口,并且需要注解@Component,默认为DefaultDictTranslation.class
aliasString默认为空,如果为空,则使用当前注解上字段的名称,并把原来值覆盖掉
readConverterExpString转换表达式,默认为空,示例:0=男,1=女,2=未知 用于 translationClass=DefaultDictTranslation.class
isFlatboolean是否平铺 用于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;


}