SpringBoot 中,返回给 前端如 Vuethymeleaf javascript 插件如 bootstrapTable时,将code码转换成文本显示
Posted 猎人在吃肉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot 中,返回给 前端如 Vuethymeleaf javascript 插件如 bootstrapTable时,将code码转换成文本显示相关的知识,希望对你有一定的参考价值。
1、重要代码
1)Dict.java 字典注解
package com.xx.app.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 字典注解
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Dict
String dictCode();
2)DictAspect .java 字典切面类
package com.xxx.app.aspect;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.xxx.app.common.aspect.annotation.Dict;
import com.xxx.app.common.constant.Constant;
import com.xxx.app.common.utils.PageUtils;
import com.xxx.app.common.utils.oConvertUtils;
import com.xxx.app.modules.service.SysDictService;
import com.xxx.app.modules.vo.SysDictShowVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Aspect
@Component
@Slf4j
public class DictAspect
@Autowired
public SysDictService sysDictService;
@Pointcut("execution( * com.xxx.app..*.*Controller.*(..))")
public void excudeService()
@Around("excudeService()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable
long time1=System.currentTimeMillis();
Object result = pjp.proceed();
long time2=System.currentTimeMillis();
log.debug("获取JSON数据 耗时:"+(time2-time1)+"ms");
long start=System.currentTimeMillis();
this.parseDictText(result);
long end=System.currentTimeMillis();
log.debug("解析注入JSON数据 耗时"+(end-start)+"ms");
return result;
private void parseDictText(Object result)
if (result instanceof PageUtils)
if (((PageUtils) result).getRows() instanceof List<?>)
List<JSONObject> items = new ArrayList<>();
List rows=((List<?>) ((PageUtils) result).getRows());
for (Object record : rows)
// 将对象转成json字符串。
// 此处转换时,对日期格式转换问题,所以下面还要对日期格式进行额外处理
String json =JSONUtil.toJsonStr(record);
// 将json字符串转换 json对象
JSONObject item = JSONUtil.parseObj(json);
for (Field field : oConvertUtils.getAllFields(record))
if (field.getAnnotation(Dict.class) != null)
String groupKey = field.getAnnotation(Dict.class).dictCode();
String value = String.valueOf(item.get(field.getName()));
String dictText ="";
if (StringUtils.isNotBlank(value))
//翻译字典值对应的txt
dictText = translateDictValue(groupKey, value);
log.info(" 字典Val : "+ value+" , 翻译字典 :"+dictText);
item.set(field.getName() + Constant.DICT_TEXT_SUFFIX, dictText);
// 对日期格式特殊处理。 LocalDateTime 类型转换string格式化日期
if (field.getType().getName().equals("java.time.LocalDateTime") &&item.get(field.getName())!=null)
String value = String.valueOf(item.get(field.getName()));
SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
item.set(field.getName(), aDate.format(new Date(Long.parseLong(value))));
// 对日期格式特殊处理。 LocalDate 类型转换string格式化日期
if (field.getType().getName().equals("java.time.LocalDate") &&item.get(field.getName())!=null)
String value = String.valueOf(item.get(field.getName()));
SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd");
item.set(field.getName(), aDate.format(new Date(Long.parseLong(value))));
items.add(item);
((PageUtils) result).setRows(items);
private String translateDictValue(String groupKey, String value)
if(oConvertUtils.isEmpty(value))
return "";
String dictText="";
/**
* 重要说明:
*/
//--------------- 结合自己的项目进行修改 ---------------------
// 此处是从缓存、配置文件、或者 数据库中查询,通过 code码 得到对应的文本显示 dictText
// 结合自己的项目进行修改。
List<SysDictShowVO> list=sysDictService.getListByKey(groupKey);
for (SysDictShowVO vo :list)
if(vo.getDictValue().equals(value))
dictText=vo.getDictName();
break;
//=================== 结合自己的项目进行修改 ==================
return dictText;
3)在实体类的属性上添加 @Dict
public class Companys implements Serializable
/** 状态 */
@Dict(dictCode = "compay_status")
private Integer status;
/** 领域 */
@Dict(dictCode = "industry_field")
private String industryField;
//----------------------------------------------
// getter/setter 省略
2、不重要的代码
下面是 伪代码
@Controller
@RequestMapping("/companys")
public class CompanysController
@ResponseBody
@PostMapping("/pageList")
public PageUtils pageList(@RequestParam Map<String, Object> params)
PageQuery pageQuery = new PageQuery(params);
Page<Companys> pageData = new Page<>(pageQuery.getPage(),pageQuery.getLimit());
List<Companys> companysList = companysService.pageList(pageData, pageQuery);
PageUtils pageUtils = new PageUtils(companysList , pageData.getTotal());
return pageUtils;
PageUtils 类:
public class PageUtils implements Serializable
private static final long serialVersionUID = 1L;
private long total;
private List<?> rows;
public PageUtils(List<?> list, long total)
this.rows = list;
this.total = total;
//----------------------------------------------
// getter/setter 省略
public class Constant
/**字典翻译文本后缀*/
public static final String DICT_TEXT_SUFFIX = "DictText";
package com.xxx.app.common.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.sql.Date;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j
public class oConvertUtils
/**
* 获取类的所有属性,包括父类
*
* @param object
* @return
*/
public static Field[] getAllFields(Object object)
Class<?> clazz = object.getClass();
List<Field> fieldList = new ArrayList<>();
while (clazz != null)
fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
clazz = clazz.getSuperclass();
Field[] fields = new Field[fieldList.size()];
fieldList.toArray(fields);
return fields;
3、思路说明
在实体类上加 上 @Dict
,参数 dictCode = "compay_status"
,
DictAspect
定义了对 controller 类中的 返回值类型是 PageUtils 进行拦截处理。
对 PageUtils, List 中各对象的每个属性进行遍历,标注有 @Dict
的属性,
根据 其vaue值 和 dictCode 值,从缓存、配置文件、数据库进行查询配置,并增加一个 item.set(field.getName() + "DictText", dictText)
参数项。
在处理过程中,对象 转 字符串,字符串转对象过程中,日期格式出现了问题,需要对日期格式进行特特殊处理。
以上是关于SpringBoot 中,返回给 前端如 Vuethymeleaf javascript 插件如 bootstrapTable时,将code码转换成文本显示的主要内容,如果未能解决你的问题,请参考以下文章