2013-05-22 3 views
3

Если я отправляю в формате weather=sunny, Spring MVC с радостью преобразует его в экземпляр enum с прогнозом погоды, используя enum с именем = sunny.Spring MVC - bind enum array

Однако, если я отправляю 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' 

Как я могу это достичь?

ответ

5

Вы можете использовать Converter s для выполнения пользовательского преобразования. Для примера, вы должны были бы сделать что-то вроде:

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 S в любом месте вы можете типа-преобразования. Теперь вам необходимо зарегистрировать его:

<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 если вы хотите. Однако Converters намного проще в использовании (ИМО).