springmvc 繫結列舉型別資料
阿新 • • 發佈:2018-12-03
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
我的一開始沒有轉換成功是因為編碼問題,後臺加一個編碼過濾器就好了