3

如果我以格式发布weather=sunny,Spring MVC 会使用 name=sunny 的枚举愉快地将其转换为 Weather 枚举实例。

但是,如果我发布weather=sunny&weather=windy,则 Spring 无法将其转换为 Weather[] 的实例。我得到的错误是:

Failed to convert property value of type 'java.lang.String[]' to required type 'com.blah.Weather[]' for property 'weather'

我怎样才能做到这一点?

4

1 回答 1

5

您可以使用Converter来执行自定义转换。对于您的示例,您需要执行以下操作:

public class WeatherConverter implements Converter<String[], Weather[]> {

    @Override
    public Weather[] convert(String[] source) {
        if(source == null || source.length == 0) {
            return new Weather[0];
        }
        Weather[] weathers = new Weather[source.length];
        int i = 0;
        for(String name : source) {
            weathers[i++] = Weather.valueOf(name); 
        }
        return weathers;
    }

}

您可以在任何需要类型转换的地方使用Converter 。现在,您需要做的是注册它:

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="package.path.WeatherConverter"/>
        </list>
    </property>
</bean>

它已经完成了。

您可以在Spring Reference中查看更多详细信息。

您还可以查看PropertyEditor,使用@InitBinder ,如果需要,可能还有@ControllerAdvice 。但是,转换器更容易使用(IMO)。

于 2013-05-22T19:47:04.027 回答