java-数据字典转换
Dict 字典注解类import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target({ElementType.FIEL...
·
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> {
@Override
public 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;
}
// 获取字典type
String 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转换成获取字典value
String val = dictVal == null ? "" : dictVal.toString();
if(!StringUtils.isEmpty(val)) {
// 判断字典类型, 依据类型获取对应的value
if("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 {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)