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>
原文地址:https://www.cnblogs.com/wade-luffy/p/6073472.html