Spring MVC自动替对象注入枚举数据
Spring MVC自动为对象注入枚举数据
一、实现转换工厂,定义转换实现,如下:
package com.mafwo;二、在spring配置文件中配置:
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;
}
}
}
<!--注意在配置转换鼓舞之后需要在 注解驱动处声明-->之后就可以使用注解方式自动注入枚举类型数据。
<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>