2

在 Spring MVC 控制器中,@PathVariable Long... ids当传递像1,2,3.

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

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

更新

根据下面 Phil Webb 的回答,在将问题报告为 Spring JIRA 上的错误后,SpringSource 的好心人在 Spring 3.2 中添加了对此的支持

4

3 回答 3

4

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

于 2012-10-12T22:04:22.597 回答
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,它应该会正确映射到列表。

于 2012-09-05T13:28:02.173 回答
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");
        }
    }
}
于 2019-02-28T12:07:25.497 回答