Dict 字典注解类

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 {/*** 转换的类型* content : 统计内容转换*/String type() default "";/*** 1 : {"code":"code","name":"name"}  默认* 2 : {"code":"name"}*/int trans() default 1;}

BaseEnum 字典格式类

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class BaseEnum {private Object code;private String name;
}

DictJsonSerializer 字典转换实现类

import java.io.IOException;
import java.lang.reflect.Field;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import lombok.extern.slf4j.Slf4j;@Slf4j
@Configuration
public class DictJsonSerializer extends JsonSerializer<Object> {@Overridepublic void serialize(Object dictVal, JsonGenerator generator, SerializerProvider provider) throws IOException {ObjectMapper objectMapper = new ObjectMapper();StringBuffer dictValName = new StringBuffer("");String currentName = generator.getOutputContext().getCurrentName();// 定义转换类型int trans = 1;try {// 获取字段Field field = generator.getCurrentValue().getClass().getDeclaredField(currentName); // 获取字典属性Dict dict = field.getDeclaredAnnotation(Dict.class);if(dict == null) {objectMapper.writeValue(generator, dictVal);return;}// 获取字典typeString type = dict.type();trans = dict.trans();if(type == null || StringUtils.isEmpty(type)) {if(trans == 2) {objectMapper.writeValue(generator, dictValName.toString());}else {objectMapper.writeValue(generator, BaseEnum.builder().code(dictVal).name(dictValName.toString()).build());}return;}// 通过字典key转换成获取字典valueString val = dictVal == null ? "" : dictVal.toString();if(!StringUtils.isEmpty(val)) {// 判断字典类型, 依据类型获取对应的valueif("content".equals(type)) {dictValName = new StringBuffer(ContentCompare.getContentName(val));} else {// 支持key1,key2方式String[] codes = val.split(",");int size = codes.length;for (int i = 0; i < size; i++) {Object valName = ParamCompareV1.param_compare_dict.get(codes[i]);dictValName.append(valName == null ? "" : valName.toString());if(i != size - 1) {dictValName.append(",");}}}}if(trans == 2) {objectMapper.writeValue(generator, dictValName);} else {objectMapper.writeValue(generator, BaseEnum.builder().code(dictVal).name(dictValName.toString()).build());}} catch (NoSuchFieldException e) {log.error(e.getMessage());if(trans == 2) {objectMapper.writeValue(generator, dictValName);}else {objectMapper.writeValue(generator, BaseEnum.builder().code(dictVal).name(dictValName.toString()).build());}}}
}

使用 BizRuleDto

import java.io.Serializable;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;/*** 衍生规则表*/
@SuppressWarnings("serial")
@Builder
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class BizRuleDto implements Serializable{/*** 自增id*/private Integer id;/*** 唯一标识guid*/private String guid;/*** 规则名称(中文) : 依据条件生成*/private String ruleName;/*** 规则名称(英文) : 依据条件生成*/private String ruleCode;/*** 类别*/private String category;/*** 产品*/private String product;/*** 统计内容*/@JsonSerialize(using = DictJsonSerializer.class)@Dict(type = "content")private String content;/*** 时间维度*/
//  @JsonSerialize(using = DictJsonSerializer.class)
//  @Dict(type = "time")private String time;/*** 统计方式*/
//  @JsonSerialize(using = DictJsonSerializer.class)
//  @Dict(type = "style")private String style;/*** 参数1、2、3、4*/
//  @JsonSerialize(using = DictJsonSerializer.class)
//  @Dict(type = "param1")private String param1;
//  @JsonSerialize(using = DictJsonSerializer.class)
//  @Dict(type = "param2")private String param2;
//  @JsonSerialize(using = DictJsonSerializer.class)
//  @Dict(type = "param3")private String param3;
//  @JsonSerialize(using = DictJsonSerializer.class)
//  @Dict(type = "param4")private String param4;/*** 状态*/private Integer state;/*** 应生成变量个数*/private Integer paramSizeShould;/*** 实际生成变量个数*/private Integer paramSizeReal;/*** 创建时间*/private String createTime;private Integer edition;}

如若不执行DictJsonSerializer, 则配置 :

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;@Configuration
public class JsonSerializeConfig extends WebMvcConfigurationSupport {@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}}

java-数据字典转换相关推荐

  1. java 数据字典 spring_springboot+redis+切面实现数据字典功能

    自定义注解:DataDict,用于bo对象类,需要翻译的属性 package com.zddts.common.annotation.dict; import java.lang.annotation ...

  2. 【引用】在Eclipse中将java Project转换成Dynamic Web Project

    编辑工程的.project文件: 添加 <nature>org.eclipse.wst.common.project.facet.core.nature</nature> &l ...

  3. java时间转换 YYYY yyyy

    java时间转换,特定时间转换'YYYY',时间加一天 本帖只展示转换效果,原因不详,等待有猿人破解 效果图: 演示代码: import java.text.ParseException; impor ...

  4. 【Java代码】坐标系说明+WGS84\GCJ02\BD09坐标系转换工具+Java坐标系转换及验证源代码分享(粘贴可用)

    1. 坐标系说明 开发地图应用服务时,一定会接触到各种坐标系,而保证坐标系的正确与合理是一切数据分析的前提,总的来说,坐标系可以分为两大类:地理坐标系GCS(Geographic Coordinate ...

  5. java批量转换图片格式

    废话不多直接上代码,代码其实也不多.... package com.qiao.testImage;import java.awt.image.BufferedImage; import java.io ...

  6. Java对象转换成JSON对象/JSON对象转换成JSON字符串/JSON字符串转换成JS对象

    文章目录 后端部分 前端部分 后端部分 Option op = new Option("海淀","hd");//java对象转换json对象 JSONObjec ...

  7. java 大小写转换函数_不使用Java中的任何库函数将大写转换为小写

    java 大小写转换函数 Given a string and we have to convert it from uppercase to lowercase. 给定一个字符串,我们必须将其从大写 ...

  8. Java DOC 转换给 PDF 格式文档的代码

    工作过程,把写代码过程经常用的代码片段备份一次,下面的代码段是关于Java DOC 转换给 PDF 格式文档的代码,应该对码农们有所用. import java.io.File; import jav ...

  9. 将已有项目转为se项目_如何将 Java 项目转换成 Maven 项目

    本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目.首先要明确的是,用 Maven 管理 Java 项目的确 ...

  10. jsp java乱码转换_JSP中文乱码问题《转》

    之前总是碰到JSP页面乱码的问题,每次都是现在网上搜,然后胡乱改,改完也不明白原因. 这次正好作下总结,中文乱码就是因为编码不符,可能出现乱码有四个地方: 1 JSP编码乱码 2 HTML编码乱码 3 ...

最新文章

  1. python 存redis失败无提示_Python Redis日志错误
  2. 不可错过!普渡大学最新《机器学习》课程
  3. c++用二叉树表示代数表达式_C语言:数据结构-二叉树的定义和基本术语和二叉树的性质...
  4. 自定义FireFox浏览器滚动条
  5. 【资源】首发:徐亦达老师的机器学习课件及下载(中文目录)
  6. 一起认识FileShare
  7. 拥抱智能,AI视频编码技术的新探索
  8. IAR 下C中嵌入汇编
  9. 数据结构 - 多路搜索树(2-3树、b树、b+树、b*树)
  10. 创新, FMA SMA 世界第一台VCD机的故事
  11. vue中$nextTick()作用
  12. 华为大数据中心山西_任正非:华为愿与山西一道建立“煤矿人工智能创新实验室”...
  13. 计算机考试题库电子版,全国计算机等级考试一级试题库大全完整版附参考答案...
  14. 文件i/o函数 open/close
  15. php与plc,plc编程语言有哪几种
  16. 爬虫豆瓣top250代码
  17. MyBase 与 HTML Help Workshop 编辑chm
  18. windows7 专业版安装中文语言包
  19. Python超详细基础入门教程
  20. SVN忽略项目中的文件或者文件夹

热门文章

  1. 模拟IIC_读写BQ40Z50模块
  2. 计算机没有安装显卡驱动能显示桌面吗,电脑桌面右键没有显卡设置怎么添加
  3. ActiveX控件 oxc文件的使用
  4. AUTOMATE THE BORING STUFF WITH PYTHON读书笔记 - 第12章:WEB SCRAPING
  5. E22-400T22S1C lora测试说明
  6. Java流程控制示例2:用if语句实现计算身体质量指数
  7. 未来十年智慧城市如何发展?百度智慧城市有话说
  8. 中国专精特新小巨人——最具投资价值50强
  9. 超高频RFID电子标签的优点与应用
  10. Kyligence 出席华为全球智慧金融峰会,加速拓展全球市场