springboot集成字典注解

又是想下班的一天

文章目录


前言

springboot使用AOP简单集成字典注解

一、通过注解进行字典赋值

使用AOP切面实现字典的赋值,自动将code转换为name,减少工作(偷懒)

二、使用步骤

1.添加注解

代码如下(示例):

java 复制代码
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.序列化处理类

代码如下(示例):

java 复制代码
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.实体类添加注解

java 复制代码
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返回值

java 复制代码
      {
        "id": "1522492702905954306",
        "name": "小庄",
        "level": "1",
        "levelName": "哦呜"
      },

总结

以上就是注解实现自动添加字典值

相关推荐
高山上有一只小老虎9 分钟前
idea中设置快捷键风格
java·ide·intellij-idea
JH307310 分钟前
IDEA自带的Maven安装位置
java·maven·intellij-idea
武子康12 分钟前
大数据-128 - Flink 并行度详解:从概念到最佳实践,一文读懂任务并行执行机制 代码示例与性能优化
大数据·后端·flink
Q_Q51100828515 分钟前
python+uniapp基于微信小程序的学院设备报修系统
spring boot·python·微信小程序·django·flask·uni-app
小毛驴85033 分钟前
在Spring Boot开发中,HEAD、OPTIONS和 TRACE这些HTTP方法各有其特定的应用场景和实现方式
spring boot·后端·http
梵得儿SHI35 分钟前
Java 反射机制核心类详解:Class、Constructor、Method、Field
java·开发语言·反射·class·constructor·java反射·java反射机制
m0_736927041 小时前
想抓PostgreSQL里的慢SQL?pg_stat_statements基础黑匣子和pg_stat_monitor时间窗,谁能帮你更准揪出性能小偷?
java·数据库·sql·postgresql
Jabes.yang1 小时前
Java面试大作战:从缓存技术到音视频场景的探讨
java·spring boot·redis·缓存·kafka·spring security·oauth2
zl9798991 小时前
SpringBoot-依赖管理和自动配置
spring boot·后端·状态模式
JaguarJack1 小时前
PHP8.5 的新 URI 扩展
后端·php