springboot 数据翻译:支持枚举翻译、字典表翻译、字段翻译、对象翻译、方法翻译

 

1. 数据翻译

        springboot 项目开发中常见到的数据翻译包括:

        枚举翻译、字典表翻译、外键翻译、级联字段翻译、远程调用翻译等。

 

2. 数据来源

  • 枚举代码(枚举)
  • 数据表(字典表、关联表)
  • 自定义方法(本地处理,跨服务查询、第三方API查询等)

这里通过定义3个注解来分别处理

核心注解

应用场景

@TransEnum

@TransEnum(dictType = "类型code", source = "变量名")

说明:使用枚举翻译

@TransDict

@TransDict(dictType = "类型code", source = "源变量名")

说明:优先使用枚举翻译,再使用字典表翻译;

需要自定义实现接口 TransDictHandler,用于读取字典表翻译

@TransSQL

@TransSQL(selectSql = "select xx from xx where id=#{变量名}")

说明:配置动态SQL,查询字典表、关联表进行翻译,支持Entity对象

@TransClass

@TransClass(catalog="类型code", service =XxxTransService.class)

说明:用户自定义翻译代码,如访问http接口进行翻译

 

3. 使用介绍

@TransEnum

        说明:允许用户自定义枚举字典,要求枚举实现接口IDict,并添加 @DictType标识

@Getter
@Setter
public class ProjectDTO implements Serializable {
    
    /* 应用状态:字典值 */
    private String status;
    
    /* 应用状态:字典名称  */
    @TransEnum(dictType = "project_status", orgFieldName = "status")
    private String statusDesc;

    /* 业务类型 sys_oper_type */
    private String operType;

    @TransDict(dictType = "sys_oper_type", source = "operType")
    private String operTypeDesc;
}


//定义一个枚举
@DictType(value = "project_status", label = "应用状态")
public enum ProjectStatusEnum implements IDict {
    no("未开始"), 
    go("开发中"), 
    check("验收中"), 
    over("完成");

    private String label;

    ProjectStatusEnum(String label){
        this.label = label;
    }

    @Override
    public String getLabel() {
        return label;
    }

    @Override
    public Object getValue() {
        return name();
    }
}

@TransSQL

        说明:@TransSQL 参数selectSql可以使用动态变量 #{userName},  ${userId}

@Getter
@Setter
public class ProjectDTO implements Serializable {

    /* 用户ID */
    private String userId;

    /* 用户名,从表sys_user中查询用户名后回填*/
    @TransSQL(selectSql = "select user_name from sys_user where id=#{userId}")
    private String userName;

    /* 应用状态值:字典值 project_status */
    private String status;

    /* 应用状态名:从表sys_dict_data中查询数据回填 */
    @TransSQL(selectSql = "select dict_label from sys_dict_data where dict_type='project_status' and dict_value=#{status}")
    private String statusDesc;
}

@TransClass

        说明:@TransClass用于需要经过复杂计算得到的数据回填,需要用户自定义实现接口 ITransService

@Getter
@Setter
public class ProjectDTO implements Serializable {

    //获取当前租户ID
    @TransClass(catalog="", service = TenantTransService.class)
    private String tenantId;
}


@Component
public class TenantTransService implements TransClassService {

    @Autowired
    private BaseSessionService sessionService;

    @Override
    public void handField(String catalog, Object object, Field field, Map<String, Object> example) {
        String fieldName = field.getName();
        if("tenantId".equals(fieldName)){
            String tenantId = sessionService.getTenantId();
            BeanMap.create(object).put(fieldName, tenantId);
        }
    }
}

手动调用

@RestController
@RequestMapping("/project")
@Slf4j
public class ProjectController {

    @Autowired
    private ProjectService projectService;
    @Autowired
    private EasyTransService transService;

    /**
     * Get  localhost:9501/project/listByGroup/{groupId}
     * @param groupId
     * @return
     */
    @ApiOperation(value = "查询应用列表(分组下)")
    @GetMapping("/listByGroup/{groupId}")
    public Result listByGroup(@PathVariable String groupId) {
        List<ProjectDTO> list = this.projectService.listByGroup(groupId);
        //翻译属性
        transService.transBatch(list);
        return Result.ok(list);
    }
}

4. 引入jar

maven 依赖方式:将 jar 放在/libs目录下,配置如下
<dependency>
    <groupId>com.geline.cloud</groupId>
    <artifactId>coder-sdk-easy-trans</artifactId>
    <scope>system</scope>
    <version>1.3.0</version>
    <systemPath>${project.basedir}/libs/coder-sdk-easy-trans-1.3.0.jar</systemPath>
</dependency>

gradle 依赖方式:将 jar 放在/libs目录下,配置如下

    compile fileTree(dir: 'libs', includes: ['*jar'])

 

源代码地址:https://gitee.com/cloud-coder/coder-sdk-easy-trans

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星梦天河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值