# SingleCodeTranslate **Repository Path**: zhuiii/single-code-translate ## Basic Information - **Project Name**: SingleCodeTranslate - **Description**: 单值代码翻译组件 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-29 - **Last Updated**: 2021-12-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 单值代码翻译服务 在上家公司遇到了这个组件,当时看了源码,然后呢,现在在新公司有差不多的需求,就写着玩玩~ 比较简陋,只做了最主要的部分,其实还有redis缓存和MySQL查询没做。 #### 功能简介 根据注解自动翻译对应的值,比如gender=1,表示男性,那么翻译后就是gender=1,genderTranslateText=男,会增加一个Translate字段,这样的一个功能。 codeType|code|value -|-|- 1001|1|男 1001|2|女 #### 环境 + Java 11 + SpringBoot 2.2.6 + HuTool 5.4.1 + Lombok 1.18.20 #### 目录结构 + annotation 注解包,有两个注解,`Translate`和`CodeType`。`Translate`标注在controller层的函数上,表示此函数的返回值需要进行翻译。 `CodeType`表示翻译的类型,如有这样一个单值,codeType=1001,它拥有1->男,2->女这样一个翻译类型。如果gender=1,那么genderTranslateText=男。 + bean 对象。 + cache 缓存层,可以在项目启动时读取数据库,将所有的codeType读取到缓存里,这样就不用频繁的查库。 + controller 测试controller层。 + filter 基于ResponseBodyAdvice,对controller层返回的对象进行修改,添加translateText。 #### 效果 + 不翻译时 + url:`http://localhost:5710/test2` + 翻译后的值`{"name":"zhangsan","gender":"1","age":20,"tests":[{"name":"lisi","gender":"2","age":18,"tests":null}]}` + 单个对象翻译时 + url:`http://localhost:5710/test1` + 翻译后的值`{"genderTranslateText":"男","gender":"1","tests":[{"gender":"2","name":"lisi","age":18}],"name":"zhangsan","age":20}` + 数组对象翻译时 + url:`http://localhost:5710/test3` + 翻译后的值`[{"genderTranslateText":"男","gender":"1","name":"wangwu","age":100},{"genderTranslateText":"女","gender":"2","name":"liuliu","age":200}]` 可以看到翻译还是挺有用的,不需要前后端手动转了。 但是呢,在第二个示例里,对于嵌套对象tests里需要翻译的字段gender是没有翻译。这因为如果要实现的话,比较麻烦,需要用到反射的,在性能方面有所影响,所以就不考虑了~只考虑一般情况。