zoukankan      html  css  js  c++  java
  • Spring 参数绑定

    一、枚举类型

    1、枚举的声明和定义:

    枚举类型是这样的,

    public interface BaseEnum {
        Integer getCode();
    
        String getText();
    }

    继承自该接口的枚举类,

    @AllArgsConstructor
    @Getter
    public enum CollectionOrNot implements BaseEnum {
        NO(0, "否"),
        YES(1, "是");
    
        private Integer code;
        @JsonValue
        private String text;
    
        @JsonCreator
        public static CollectionOrNot jsonCreate(Integer code) {
            return EnumUtils.codeOf(CollectionOrNot.class, code);
        }
    
        @JsonCreator
        public static CollectionOrNot jsonCreate(String text) {
            return EnumUtils.codeOf(CollectionOrNot.class, text);
        }
    
    }

    EnumUtils的代码:

    public class EnumUtils {
        public static <T extends BaseEnum> T codeOf(Class<T> enumClass, int code) {
            T[] enumConstants = enumClass.getEnumConstants();
            for (T t : enumConstants) {
                if (t.getCode() == code) {
                    return t;
                }
            }
            return null;
        }
    
        public static <T extends BaseEnum> T codeOf(Class<T> enumClass, String text) {
            T[] enumConstants = enumClass.getEnumConstants();
            for (T t : enumConstants) {
                if (t.getText().equals(text)) {
                    return t;
                }
            }
            return null;
        }
    
    }

    2、ConverterFactory的声明和定义,

    import com.tianji.tingcloudapi.common.enums.BaseEnum;
    import org.springframework.core.convert.converter.Converter;
    import org.springframework.core.convert.converter.ConverterFactory;
    
    public class StringToEnumConverterFactory implements ConverterFactory<String, BaseEnum> {
    
        private static class StringToEnumConverter<T extends BaseEnum> implements Converter<String, T> {
    
            private Class<T> enumType;
    
            // 构造方法
            public StringToEnumConverter(Class<T> enumType) {
                this.enumType = enumType;
            }
    
            public T convert(String source) {
                T[] enumConstants = enumType.getEnumConstants();
                for (T t : enumConstants) {
                    if (t.getText().equals(source)) return t;
                }
                throw new IllegalArgumentException("无法匹配对应的枚举类型");
            }
        }
    
        @Override
        public <T extends BaseEnum> Converter<String, T> getConverter(Class<T> targetType) {
            return new StringToEnumConverter<>(targetType);
        }
    }

    3、ConverterFactory的注册

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
    
        /**
         * 枚举类的转换器工厂 addConverterFactory
         */
        @Override
        public void addFormatters(FormatterRegistry registry) {
    //        registry.addConverterFactory(new IntegerToEnumConverterFactory());
            registry.addConverterFactory(new StringToEnumConverterFactory());
        }
    }

    4、参数绑定

    @RequestParam(name = "cpuGatherState", required = false) CollectionOrNot cpuGatherState,

    5、相关链接

    二、JSR310的日期绑定

  • 相关阅读:
    如何使用PhoneGap打包Web App
    js获取鼠标点击事件的相对位置
    IDEA跳转到上一个下一个方法的快捷键
    JunitGenerator
    无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类
    IntelliJ IDEA 2019.3注册码(亲测有效,可激活至 2089 年)
    NACOS MalformedInputException 无法读取中文配置问题
    maven maven-surefire-plugin的乱码问题
    Idea单元测试Junit Generator设置
    Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
  • 原文地址:https://www.cnblogs.com/echo1937/p/13690228.html
Copyright © 2011-2022 走看看