又是想下班的一天
文章目錄
- 前言
- springboot使用AOP簡單集成字典注解
- 一、通過注解進行字典賦值
- 二、使用步驟
- 1.添加注解
- 2.序列化處理類
- 3.實體類添加注解
- 4.json返回值
- 總結
前言
springboot使用AOP簡單集成字典注解
一、通過注解進行字典賦值
使用AOP切面實現字典的賦值,自動將code轉換為name,減少工作(偷懶)
二、使用步驟
1.添加注解
代碼如下(示例):
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.springblade.modules.system.serialize.DictBizOneSerialize;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** @author hua* @description*/@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = DictBizOneSerialize.class)
public @interface DictBizOne {String type();
}
2.序列化處理類
代碼如下(示例):
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 com.fasterxml.jackson.databind.ser.std.StdSerializer;
import lombok.extern.slf4j.Slf4j;
import org.springblade.common.cache.DictBizCache;
import org.springblade.modules.system.annotation.DictBizOne;import java.io.IOException;
import java.util.Objects;/*** @author hua* @description*/
@Slf4j
public class DictBizOneSerialize extends StdSerializer<Object> implements ContextualSerializer {//字典注解private DictBizOne dict;public DictBizOneSerialize() {super(Object.class);}public DictBizOneSerialize(DictBizOne dict) {super(Object.class);this.dict = dict;}private String type;@Overridepublic void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException {if (Objects.isNull(value)) {gen.writeObject(value);return;}if (Objects.nonNull(dict)){type = dict.type();}// 通過數據字典類型和value獲取name gen.writeObject(value);gen.writeFieldName(gen.getOutputContext().getCurrentName()+"Name");//字典賦值(不同項目的字典值獲取會不一樣,個人根據實際情況實現)String label = DictBizCache.getValue(type, String.valueOf(value));gen.writeObject(label);}@Overridepublic JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty beanProperty) throws JsonMappingException {if (Objects.isNull(beanProperty)){return prov.findValueSerializer(beanProperty.getType(), beanProperty);}DictBizOne dict = beanProperty.getAnnotation(DictBizOne.class);if (Objects.nonNull(dict)){type = dict.type();return this;}return prov.findNullValueSerializer(null);}
3.實體類添加注解
import java.io.Serializable;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Data
public class SpecificJobPositionsVO implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "id")private Long id;@ApiModelProperty(value = "name")private String name;@ApiModelProperty(value = "等級")@Dict(type = "USER_LEVEL") //type中添加字典的codeprivate String level;}
4.json返回值
{"id": "1522492702905954306","name": "小莊","level": "1","levelName": "哦嗚"},
總結
以上就是注解實現自動添加字典值