美文网首页
SpringBoot枚举传参

SpringBoot枚举传参

作者: 架构师与哈苏 | 来源:发表于2020-02-27 16:25 被阅读0次

    创建一个接口所有枚举继承

    package com.gecko.charging.common;
    
    public interface BaseEnum {
        Integer getCode();
    }
    

    具体的枚举类型

    package com.gecko.charging.partner.enums;
    
    import com.alibaba.fastjson.annotation.JSONType;
    import com.gecko.charging.common.BaseEnum;
    import com.gecko.charging.util.json.EnumDeserializer;
    import com.gecko.charging.util.json.EnumSerializer;
    
    /**
     * 合作商类型
     */
    //@JSONType(serializer = EnumSerializer.class, deserializer = EnumDeserializer.class, serializeEnumAsJavaBean = true)
    public enum PartnerType implements BaseEnum {
        agent(1),//代理商
        purchaser(2),//采购商
        operators(3),//运营商
        ;
    
        private Integer code;
    
        PartnerType(Integer code) {
            this.code = code;
        }
    
        @Override
        public Integer getCode() {
            return this.code;
        }
    }
    
    

    枚举转换器工程

    package com.gecko.charging.common.stringtoenum.converter;
    
    import com.gecko.charging.common.BaseEnum;
    import org.springframework.core.convert.converter.Converter;
    import org.springframework.core.convert.converter.ConverterFactory;
    import org.springframework.stereotype.Component;
    import org.springframework.util.StringUtils;
    
    @Component
    public class EnumConvertFactory implements ConverterFactory<String, BaseEnum> {
    
        @Override
        public <T extends BaseEnum> Converter<String, T> getConverter(Class<T> targetType) {
            return new StringToIEum<>(targetType);
        }
    
        @SuppressWarnings("all")
        private static class StringToIEum<T extends BaseEnum> implements Converter<String, T> {
            private Class<T> targerType;
            public StringToIEum(Class<T> targerType) {
                this.targerType = targerType;
            }
    
            @Override
            public T convert(String source) {
                if (StringUtils.isEmpty(source)) {
                    return null;
                }
                return (T) EnumConvertFactory.getIEnum(this.targerType, source);
            }
        }
    
        public static <T extends BaseEnum> Object getIEnum(Class<T> targerType, String source) {
            for (T enumObj : targerType.getEnumConstants()) {
                if (source.equals(String.valueOf(enumObj.getCode()))) {
                    return enumObj;
                }
            }
            return null;
        }
    }
    
    
    

    添加工厂到配置中

    package com.gecko.charging.common.stringtoenum.config;
    
    import com.gecko.charging.common.stringtoenum.converter.EnumConvertFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.format.FormatterRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
    
        @Autowired
        private EnumConvertFactory enumConvertFactory;
    
        @Override
        public void addFormatters(FormatterRegistry registry) {
            registry.addConverterFactory(enumConvertFactory);
        }
    
    }
    
    

    接口中传指定code就可以转换成枚举了!

    个人微信公众,经常更新一些实用的干货:


    image.png

    相关文章

      网友评论

          本文标题:SpringBoot枚举传参

          本文链接:https://www.haomeiwen.com/subject/dmhxhhtx.html