【无标题】

java 复制代码
实体类中字典映射
1.定义注解
package com.perye.dokit.entity.dictSet;

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

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)
@JacksonAnnotationsInside
@JsonSerialize(using = DictBizOneSerialize.class)
public @interface DictBizOne {

    String type();
}
2.获取字典
package com.perye.dokit.entity.dictSet;

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 com.perye.dokit.entity.DictDetail;
import com.perye.dokit.query.DictDetailQueryCriteria;
import com.perye.dokit.service.DictDetailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.IOException;
import java.util.Objects;

/**
 * @author hua
 * @description
 */
@Slf4j
public class DictBizOneSerialize extends StdSerializer<Object> implements ContextualSerializer {
    @Autowired
   private DictDetailService dictDetailService;
    //字典注解
    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()+"Label");
        //字典赋值(不同项目的字典值获取会不一样,个人根据实际情况实现)
        DictDetailQueryCriteria dq =new DictDetailQueryCriteria();
        dq.setDictName(type);
        dq.setValue(String.valueOf(value));
        DictDetail dd =  dictDetailService.queryObject(dq);
        String label = dd.getLabel();
        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);
    }
}
//从数据库中获取字典值
   @Cacheable
    @Override
    public DictDetail queryObject(DictDetailQueryCriteria criteria) {
        List<DictDetail> list = dictDetailRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder));
        if(list.size()>0){
            return list.get(0);
        }
       return  new DictDetail();
    }
根据name和value
@Data
public class DictDetailQueryCriteria {

    @Query(type = Query.Type.INNER_LIKE)
    private String label;
    @Query(type = Query.Type.EQUAL)
    private String value;

    @Query(propName = "name",joinName = "dict")
    private String dictName;
}
相关推荐
见叶之秋11 小时前
C++基础入门指南
开发语言·c++
小江的记录本11 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
计算机安禾11 小时前
【c++面向对象编程】第42篇:模板特化与偏特化:为特定类型定制实现
开发语言·c++·算法
qq_4017004111 小时前
Qt 项目中使用 QSS 的全面总结
开发语言·qt
玖釉-12 小时前
C++ 中的循环语句详解:while、do...while、for、嵌套循环与循环控制
开发语言·c++·算法
XMYX-012 小时前
37 - Go env 环境变量:配置管理与运行时控制
开发语言·golang
二宝哥12 小时前
离线安装maven
java·数据库·maven
一楼的猫12 小时前
从文本特征分析看网文平台AI检测:3个被忽视的指标
开发语言·人工智能·学习方法·ai编程·ai写作·ai自动写作
日月云棠12 小时前
6 高级配置:Spring Boot整合、泛化调用与配置指南
java·后端
yuan1999712 小时前
基于MATLAB的梁非线性动力学方程编程实现框架
开发语言·matlab