springmvc 绑定枚举类型数据

springmvc 绑定枚举类型数据

在开发的过程中,会涉及到大量的枚举类型数据,我们都知道,Springmvc本身能自动转换很多的数据类型,也支持你自定义转换类型,非常灵活。

Enum类型的变量,在form表单里,传过来的value是个String类型值,那么我们需要让它自动匹配到对应的Enum类上去。

配置如下:

spring配置:

<!-- 枚举类型自动绑定 -->
    <bean id="conversionService"
        class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.ziwow.pay.ws.convert.StringToEnumConverterFactory" />
            </set>
        </property>
    </bean>

另外这里加上

<mvc:annotation-driven  conversion-service="conversionService"/>

StringToEnumConverterFactory是一个通用的转换类,如果你要实现自己定制的转换类,也可以自己去实现,按照规范,实现ConverterFactory即可。
代码如下

@SuppressWarnings("unchecked")
final class StringToEnumConverterFactory implements
		ConverterFactory<String, Enum> {
 
	public <T extends Enum> Converter<String, T> getConverter(
			Class<T> targetType) {
		return new StringToEnum(targetType);
	}
 
	private class StringToEnum<T extends Enum> implements Converter<String, T> {
 
		private final Class<T> enumType;
 
		public StringToEnum(Class<T> enumType) {
			this.enumType = enumType;
		}
 
		public T convert(String source) {
			if (source.length() == 0) {
				return null;
			}
			return (T) Enum.valueOf(this.enumType, source.trim());
		}
	}
 
}

比如我有个Enum类,是GenderEnum类

  public enum GenderEnum{
  	  BOY(1,"boy"),GIRL(2,"girl")
  	  
    }

那我的表单里,gender对应的value,只要是BOY或者GIRL,它就能自动匹配绑定好了,如果你要根据id的值来绑定,那就修改上面的StringToEnumConverterFactory类,修改它的convert方法即可。

参考:http://haohaoxuexi.iteye.com/blog/1860732
原文:https://blog.csdn.net/china_bobo/article/details/43016415

我的一开始没有转换成功是因为编码问题,后台加一个编码过滤器就好了

猜你喜欢

转载自blog.csdn.net/qq_23934475/article/details/84751157