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を参照してください。

@InitBinderを使用してPropertyEditorを調べることもできます。また、必要に応じて@ControllerAdviceを使用することもできます。ただし、コンバーターははるかに使いやすいです (IMO)。

于 2013-05-22T19:47:04.027 に答える