zoukankan      html  css  js  c++  java
  • Spring MVC自动为对象注入枚举数据

    一、实现转换工厂,定义转换实现,如下:
     
     
    package com.mafwo;
    
    import org.springframework.core.convert.converter.Converter;
    import org.springframework.core.convert.converter.ConverterFactory;
    
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    public class OrdinalToEnumConverterFactory implements ConverterFactory<String, Enum<?>> {
    
    @Override
    public <T extends Enum<?>> Converter<String, T> getConverter(Class<T> targetType) {
    return new OrdinalToEnum<T>(targetType);
    }
    
    private class OrdinalToEnum<T extends Enum<?>> implements Converter<String, T> {
    
    private final Class<T> enumType;
            
             public OrdinalToEnum(Class<T> enumType) {
    this.enumType = enumType;
    }
    
    @Override
    public T convert(String source) {
    // 转换成数字
    int ordinal = Integer.valueOf(source);
                 if(ordinal == Integer.MIN_VALUE) {
    return null;
    }
                 Object temp = null;
                 try {
                     Method getCode = enumType.getMethod("getCode");
    
    Object[] objects = enumType.getEnumConstants();
                     for(Object ob: objects){
                        Integer temps = (Integer) getCode.invoke(ob);
                         if(temps == ordinal)
                         {
                             temp = ob;
                             break;
    }
    
                     }
    
                 } catch (NoSuchMethodException e) {
                     e.printStackTrace();
    } catch (InvocationTargetException e) {
                     e.printStackTrace();
    } catch (IllegalAccessException e) {
                     e.printStackTrace();
    }
    return (T) temp;
    }
    
         }
     }
    

      

    二、在spring配置文件中配置:
    <!--注意在配置转换鼓舞之后需要在 注解驱动处声明-->
    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
    
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
    <!-- 自动将枚举类型的序列号解析称枚举类型 -->
    <bean class="com.mafwo.OrdinalToEnumConverterFactory" />
            </set>
        </property>
    </bean>
    

      

    之后就可以使用注解方式自动注入枚举类型数据。

     

  • 相关阅读:
    IO流
    java的反射机制
    docker下安装mysql
    makefile
    python轻量级orm
    MySQLdb与sqlalchemy的简单封装
    python网络socket编程
    解决mysqldb查询大量数据导致内存使用过高的问题
    sqlalchemy根据数据库结构生成映射的实体
    centos7构建python2.7常用开发环境
  • 原文地址:https://www.cnblogs.com/xiuluo--angel/p/7097013.html
Copyright © 2011-2022 走看看