springboot集成字典注解
2023-12-15 06:50:34
又是想下班的一天
前言
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;
@Override
public 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);
}
@Override
public 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中添加字典的code
private String level;
}
4.json返回值
{
"id": "1522492702905954306",
"name": "小庄",
"level": "1",
"levelName": "哦呜"
},
总结
以上就是注解实现自动添加字典值
文章来源:https://blog.csdn.net/sunshiine8080/article/details/134878109
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!