注解类对象
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.lang.annotation.*;
@JacksonAnnotationsInside
@JsonSerialize(
using = DicSerializer.class
)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Dic {
String code();
String fieldName()default "";
}
DicSerializer对象
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.util.Objects;
public class DicSerializer extends JsonSerializer<String> implements ContextualSerializer {
private String code;
private String fieldName;
public DicSerializer(String code, String fieldName) {
this.code = code;
this.fieldName = fieldName;
}
public DicSerializer() {
}
@Override
public void serialize(String s, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString(s);
jsonGenerator.writeFieldName(fieldName);
//这一步是通过code和value获取name,根据自己框架获取哈,我这里只是模拟一个获取的方法
String name = DicData.getNameByCodeAndValue(this.code,s);
jsonGenerator.writeString(name);
}
@Override
public JsonSerializer<?> createContextual(SerializerProvider serializerProvider, BeanProperty beanProperty) throws JsonMappingException {
if(beanProperty !=null){
if(Objects.equals (beanProperty.getType ().getRawClass (), String.class)){
Dic t =beanProperty.getAnnotation (Dic.class);
if(t !=null){
String beanFieldName = beanProperty.getName();
if(StringUtils.hasText(t.fieldName())){
beanFieldName = t.fieldName();
}
return new DicSerializer(t.code(),beanFieldName+"Text");
}
}
return serializerProvider.findValueSerializer (beanProperty.getType (), beanProperty);
}
return serializerProvider.findNullValueSerializer (beanProperty);
}
}
虚假的字典数据类
import java.util.HashMap;
import java.util.Map;
public class DicData {
public static final Map<String, Map<String,String>> dicData = new HashMap<>();
static {
Map<String,String> m1 = new HashMap();
m1.put("1","男");
m1.put("2","女");
dicData.put("dicGender",m1);
Map<String,String> m2 = new HashMap();
m2.put("1","中国");
m2.put("2","美国");
dicData.put("dicIdentityType",m2);
}
public static String getNameByCodeAndValue(String code,String value){
return dicData.get(code).get(value);
}
}
实体类
import java.io.Serializable;
public class Entity implements Serializable {
String name;
String address;
@Dic(code = "dicGender",fieldName = "genderName")
String gender;
@Dic(code = "dicIdentityType")
String identityType;
public Entity() {
}
public Entity(String name, String address, String gender, String identityType) {
this.name = name;
this.address = address;
this.gender = gender;
this.identityType = identityType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getIdentityType() {
return identityType;
}
public void setIdentityType(String identityType) {
this.identityType = identityType;
}
}
测试控制层
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Controller {
@RequestMapping("/test")
public Entity test(String gender,String identityType){
return new Entity("张三","中国",gender,identityType);
}
}
测试结果