Spring的类型转换器
spring有2种类型转换器,一种是propertyEditor,一种是Converter。
第一种属性编辑器用法见Spring的属性编辑器的章节。如果2种转换器都适用,那么究竟会适用哪种呢?Spring默认是首先查找PropertyEditor,然后再查找Converter.
用法示例:
public enum SEX { /** * 异常 */ NULL(-1, "异常状态"), /** * 男 */ Male(1, "男"), /** * 女 */ Female(0, "女"); private final int value; private final String desc; private static Map<Integer, SysErrorCode> map = Maps.newHashMap(); static { for (SysErrorCode item : SysErrorCode.values()) { map.put(item.getIntValue(), item); } } SEX(int v, String d) { value = v; desc = d; } public static SysErrorCode genEnumByKey(int key) { return map.get(key) == null ? map.get(-1) : map.get(key); } }
定义SEX枚举的Converter
public class Integer2SexConvertor implements Converter<Integer, SEX> { @Override public SEX convert(Integer enumValueStr) {return SEX.genEnumByKey(enumValueStr); } }
Convert方法,完成类似 "1" -> SEX.Male的转换
配置修改
<mvc:annotation-driven conversion-service="conversionService" />
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="****.Integer2SexConvertor" /> </set> </property> </bean>