2013-05-22 2 views
3

weather=sunny 형식으로 게시하면 Spring MVC는 name = sunny 인 enum을 사용하여 Weather enum 인스턴스로 변환합니다.Spring MVC - enum 배열을 바인드합니다.

그러나 내가 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을 사용하면 사용자 지정 변환을 수행 할 수 있습니다. 귀하의 예를 들어, 당신은 같은 것을 할 필요가있을 것이다 : 당신은 어디에서든지 당신은 형식 변환을 할 수 있습니다 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; 
    } 

} 

. 이제는 등록하십시오 :

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

그리고 끝났습니다.

Spring Reference에서 자세한 내용을 볼 수 있습니다.

원할 경우 @InitBinder 및 아마도 @ControllerAdvice으로 PropertyEditor 초를 볼 수도 있습니다. 그러나 Converters은 사용하기가 훨씬 쉽습니다 (IMO).