2013-05-22 85 views
3

如果我發佈的格式爲weather=sunny,Spring MVC很高興地將它轉換爲使用name = sunny的枚舉的Weather枚舉實例。Spring MVC - 綁定枚舉數組

但是,如果我發佈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來執行自定義轉換。對於你的榜樣,你需要做這樣的事情:

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 s,使用@InitBinder,可能還需要@ControllerAdvice。但是,Converters更容易使用(IMO)。