Spring MVC中的@PathVariable List <uuid> </uuid>

时间:2012-09-05 11:27:14

标签: java spring spring-mvc propertyeditor path-variables

在Spring MVC控制器中,@PathVariable Long... ids在传递1,2,3之类的输入时得到解决。

如果参数声明为@PathVariable UUID... ids,则逗号分隔不起作用:返回400响应。

我可以实施自定义PropertyEditor来处理UUID[]List<UUID>吗?我能找到的唯一例子是单值,而不是集合/数组。

更新

根据Phil Webb's answer below,在将问题报告为Spring JIRA上的错误之后,SpringSource的好友们在Spring 3.2中添加了对此的支持

3 个答案:

答案 0 :(得分:4)

此问题将在Spring 3.2中修复。有关详细信息,请参阅https://jira.springsource.org/browse/SPR-9765

答案 1 :(得分:2)

您可以这样注册自定义转换器:

import org.springframework.core.convert.converter.Converter;
class UUIDConverter implements Converter<String, UUID> {

    @Override
    public UUID convert(String source) {
        return UUID.fromString(source);
    }

}

并将其注册到Spring MVC:

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="....UUIDConverter"/>
        </set>
    </property>
</bean>


<mvc:annotation-driven conversion-service="conversionService"> 
</mvc:annotation-driven>

现在,如果您提交UUID,它应该正确映射到列表。

答案 2 :(得分:0)

对于基于注释的配置,您只需向类添加@Component注释

package com.demo.config.converters;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import java.util.UUID;

@Component
public class StringToUUIDConvertor
  implements Converter<String, UUID> {

    @Override
    public UUID convert(String source) {
        try {
            return UUID.fromString(source);
        }
        // just changing default message to the one I like to see.
        catch (IllegalArgumentException ex){
            throw new IllegalArgumentException("Invalid input UUID string");
        }
    }
}