问题背景
在前后端分离开发的场景下,后端状态或者类型这样的数据以阿拉伯数字返回,比如1:通过,2:过期;只能与后端沟通好前端通过数字和中文自己对应并显示。后端如果修改字典前端也需要一起跟着改
解决办法
字典回显插件主要解决上述问题,在返回状态数字时候通过一个注解自动将数字对应的中文标识返回前端
码更加模块化和易于维护。
字典回显插件
字典回显插件是一种用于数据字典管理的插件,它能够帮助用户在前端页面上直接显示字典表中对应的文字描述,而不是只显示字典项的代码值。这种插件通常与后端字典表进行集成,可以在前端页面上轻松地将字典表中的代码值转换为对应的文字描述。
字典回显插件的实现方式可以有多种,其中一种常见的方式是将字典表的数据存储在后端数据库中,然后在前端页面上使用JavaScript或Vue等框架编写代码来获取字典表数据,并将其缓存在浏览器端。当用户在前端页面上进行相关操作时,可以直接从缓存中读取字典表数据并将其转换为对应的文字描述,从而实现字典回显的功能。
使用字典回显插件可以大大提高前端页面的可读性和用户体验,使用户更加容易理解和使用系统中的数据。此外,它还可以降低系统开发人员的开发和维护成本,提高系统的可扩展性和可维护性。
遇到问题
package com.sevenme.common.interceptor; @Component public class DictInterceptor extends HandlerInterceptorAdapter { @Autowired private CommonDictService commonDictService; @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { //rest请求modelAndView为空
if (modelAndView != null) { Map<String, Object> model = modelAndView.getModel(); for (Map.Entry<String, Object> entry : model.entrySet()) { Object value = entry.getValue(); if (value instanceof String && ((String) value).contains("{") && ((String) value).contains("}")) { String pattern = "\\{([\\w-]+)\\}"; // 匹配占位符的正则表达式 Pattern r = Pattern.compile(pattern); Matcher m = r.matcher((String) value); StringBuffer sb = new StringBuffer(); while (m.find()) { String dictType = m.group(1); // 获取数据字典类型 Map<String, String> dictMap = dictService.getDictMap(dictType); // 查询数据字典 String dictValue = dictMap.get(m.group()); // 获取对应的数据字典值 if (dictValue == null) { dictValue = m.group(); } m.appendReplacement(sb, dictValue); // 替换占位符 } m.appendTail(sb); entry.setValue(sb.toString()); // 替换原字符串 } } } }
super.postHandle(request, response, handler, modelAndView); } }
由于项目是rest请求方式,modelAndView为空,不能通过修改model。实现回显
尝试用MyBatis-Plus的拦截器
在intercept方法中,获取到了SQL查询的结果,并判断该结果是否为BaseEntity类的实例。如果是,则遍历该类中所有的属性,并找出其中使用了@Dict注解的属性。对于这些属性,通过反射获取其类型编码和值编码,并调用DictService类中的方法查询出对应的值名称,并将该名称设置回属性中。最后,返回字典回显后的查询结果。
标签:插件,String,回显,前端,关于,modelAndView,字典 From: https://www.cnblogs.com/origin-zy/p/17184835.html