spring-mvc - Spring MVC - 绑定(bind)枚举数组

标签 spring-mvc data-binding

如果我以 weather=sunny 格式发布,Spring MVC 会很乐意将其转换为使用名称为 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'

我怎样才能做到这一点?

最佳答案

您可以使用 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 s,与@InitBinder ,并且可能是 @ControllerAdvice如果你想。然而,Converters更易于使用 (IMO)。

关于spring-mvc - Spring MVC - 绑定(bind)枚举数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16695542/

相关文章:

java - hibernate 和 oracle 序列 GenericGenerator 造成差距

c# - 如何在两个窗口之间的 Wpf 应用程序中保持 session ?

wpf - 如何刷新 WPF DataGrid?

java - 从 Spring Security 成功登录时不会调用 Spring MVC Controller 方法 - 获取 404 状态

mysql - 如何为 JPA View 实体传递动态限制值?

java - spring mvc中对象的绑定(bind)列表

spring - 如何使用 BindingResult 检查特定行是否存在 Spring 中多行验证的验证错误

apache-flex - Flex 中的某些 [Bindable] 属性有效,有些则无效

arrays - Angular2,数据也保持绑定(bind)到函数内部的原始变量

c# - XAML ListBox 只显示类名