html 字典翻译,字典翻译@Dict
1、编写翻译字典@Dict
/**
* 数据字典翻译注解
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Dict {
public static final String SOURCE_NAME = "Id";
public static final String TARGET_NAME = "Name";
}
2、编写翻译字段注解@DictItem
@Target({ FIELD })
@Retention(RUNTIME)
public @interface DictItem {
CategoryEnum value();
}
3、编写切面实现翻译
@Aspect
@Component
@Slf4j
public class DictAspect {
@Reference
private SysDictionaryDubboService sysDictionaryDubboService;
@Pointcut("execution(* com.bgy.order.controller..*(..))")
public void packagePointCut(){}
/**
* 返回增强:目标方法正常执行完毕时执行
*
* @param joinPoint
* @param result
*/
@AfterReturning(pointcut = "packagePointCut() && @annotation(dict)", returning = "result")
public void afterReturningMethod(JoinPoint joinPoint, Dict dict, Object result) {
processData(result);
}
private void processData(Object result) {
List needProcessFieldList = new ArrayList<>();
Map fieldMap = new HashMap<>();
if (result instanceof Page) {
for(Object object : ((Page>)result).getRecords()){
getProcessFieldList(object, needProcessFieldList, fieldMap);
processSingleData(object, needProcessFieldList, fieldMap);
}
} else if(result instanceof List) {
for(Object object : (List>) result) {
getProcessFieldList(object, needProcessFieldList, fieldMap);
processSingleData(object, needProcessFieldList, fieldMap);
}
} else if(result instanceof Map){
for(Object obj : ((Map,?>)result).values()){
processData(obj);
}
} else if(result instanceof Serializable){
getProcessFieldList(result, needProcessFieldList,fieldMap);
processSingleData(result, needProcessFieldList,fieldMap);
}
}
private void getProcessFieldList(Object result, List needProcessFieldList, Map fieldMap) {
if(!(result instanceof Serializable)){
return;
}
List declaredFields = getAllField(result.getClass());
if (CollectionUtils.isEmpty(declaredFields)) {
return;
}
for(Field field : declaredFields){
fieldMap.put(field.getName(), field);
DictItem dictItem = field.getAnnotation(DictItem.class);
if(dictItem != null){
needProcessFieldList.add(field.getName());
}
}
}
private List getAllField(Class> clz){
List fieldList = new ArrayList<>() ;
Class> tempClass = clz;
while (tempClass != null) {//当父类为null的时候说明到达了最上层的父类(Object类).
fieldList.addAll(Arrays.asList(tempClass.getDeclaredFields()));
tempClass = tempClass.getSuperclass(); //得到父类,然后赋给自己
}
return fieldList;
}
private void processSingleData(Object data, List needProcessFieldList,Map fieldMap){
for(String fieldName : needProcessFieldList){
setDataDesc(data, fieldMap, fieldName);
}
}
private void setDataDesc(Object data, Map fieldMap, String fieldName) {
try {
Field field = fieldMap.get(fieldName);
Class> type = fieldMap.get(fieldName).getType();
if(!type.equals(Integer.class)){
return;
}
field.setAccessible(true);
Integer dictKey = (Integer)field.get(data);
DictItem dictItem = field.getAnnotation(DictItem.class);
CategoryEnum categoryEnum = dictItem.value();
if(!fieldName.endsWith(Dict.SOURCE_NAME)){
return;
}
String targetFiledName = fieldName.replace(Dict.SOURCE_NAME,Dict.TARGET_NAME);
Field findField = fieldMap.get(targetFiledName);
if (findField == null || !findField.getType().equals(String.class)) {
return ;
}
findField.setAccessible(true);
String dictValue = sysDictionaryDubboService.getDictName(categoryEnum, dictKey);
findField.set(data, dictValue);
} catch (Exception e) {
log.error("注入字典名称报错", e);
}
}
4、测试
html 字典翻译,字典翻译@Dict相关推荐
- 字节跳动青训营Day01 - 实战项目 - 在线翻译字典
实战项目 - 在线翻译字典 v1,测试api响应 v2,go语言发送api请求信息的一般方式:使用结构体格式化 v3,go语言接受api请求信息的一般方式:使用结构体格式化 v4,封装函数,进行查询 ...
- js字符串的字典序_JavaScript通过字典进行字符串翻译转换的方法
本文实例讲述了JavaScript通过字典进行字符串翻译转换的方法..具体分析如下: 这里实际上就是先设置一个对照的字典,然后通过翻译函数,从字典中找到相应的键值.需要在JavaScript 1.8以 ...
- 如何在elementUi动态表格table中翻译字典值。vue通用方案
实现思路: 先渲染动态行,然后在行里面添加slot插槽,写需要翻译字典的判断. vue的v-for 的子组件里面 v-if . 注意v-for与v-if不要写在同一标签内. 例子: <el-ta ...
- python3 字典打印_Python3基础 dict items 以元组的形式打印出字典的每一个项
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda : 4.5.11 typesetting : Markdown ...
- python 存储字典_python 字典存储
Python学习笔记--元组.列表和字典的使用笔记 Python学习笔记--元组.列表和字典的使用笔记 最近开始学习python语言,所以在学习中做了一些记录,这次讲的是元组.列表和字典的基础操作和区 ...
- python之post的响应爬虫——利用python实现有道翻译在线翻译
利用python实现有道翻译在线翻译 1 post的请求方式 1.1 post和get的区别 1.2 post特点 2.利用request.urllib实现 2.1 寻找网页源代码翻译的位置 2.2 ...
- 绵阳python培训_《绵》原文及翻译海绵翻译
<绵>原文及翻译海绵翻译 查字典语文网小编给各位考 生筛选整理了 : 诗经中<绵>原文,<绵>原文翻译,诗经的来源, 希望对大家有所帮助,更多的资讯请持续关注查字典 ...
- Office内嵌12国语言翻译功能----翻译好助手(转)
Office内嵌12国语言翻译功能----翻译好助手(转)[@more@] 这是Office XP/2003之后才有的超好用功能,但可能很多人都不知道,所以,每次遇到不会念或看不懂的英文.日文,往往束 ...
- Translatium for Mac 8.2.1 Google翻译 实时翻译 破解版下载
像 Translatium 一样进行翻译 – 为 MacOS 提供功能最强大的 Google Translate 客户端. Translatium for Mac 8.2.1 Google翻译 实时翻 ...
最新文章
- 《精通Nginx》——1.2 从源代码安装Nginx
- 关于时间类型数据的转换
- iOS Xcode8的适配
- 【机器学习】创建自己的电影推荐系统
- oracle实例的概念组成,oracle体系结构的两个基本概念:数据库和实例
- win10系统崩溃怎么修复_系统崩溃怎么重装系统图文教程
- 知道半径 两点角度 怎么求坐标
- Django 工作流程
- pppoe服务器账号和密码是什么,小米路由器pppoe账号密码是什么你知道吗
- react的setState——读《react小书》
- python qq群_用Python玩转QQ群论坛
- 安装VS2008(转)
- 8个免费图片素材网,赶紧收藏起来
- USB有线网卡怎么用
- gps测试软件搜索不到星,手机搜不到星 搜星慢终极解决方法!
- 黄油刀 Butterknife的使用准备工作
- ipad/iphone内存管理三之NoAutorelease和Autorelease详细解说
- ObiFruid创建流体,ObiFruid学习笔记
- android studio开发微信界面
- 【蓝桥杯】——键盘是使用