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>
之后就可以使用注解方式自动注入枚举类型数据。

猜你喜欢

转载自xiuluocd.iteye.com/blog/2302501