在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中添加了对此的支持
答案 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");
}
}
}