1. 程式人生 > >springmvc 繫結列舉型別資料

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

我的一開始沒有轉換成功是因為編碼問題,後臺加一個編碼過濾器就好了