在Spring MVC中绑定UUID

Kon*_*ong 8 java spring spring-mvc

在Spring MVC中绑定UUID的最简单方法是什么,这样可以:

@RequestMapping("/MyController.myAction.mvc")
@ResponseBody
public String myAction(UUID id, String myParam)...
Run Code Online (Sandbox Code Playgroud)

使用上面我当前获得以下异常:

org.springframework.beans.BeanInstantiationException: 
Could not instantiate bean class [java.util.UUID]: 
No default constructor found; 
nested exception is java.lang.NoSuchMethodException: java.util.UUID.<init>()
Run Code Online (Sandbox Code Playgroud)

还有其他问题围绕着这个,但似乎没有人回答它.我正在使用Spring 3.latest(实际上是4 EA).我正在采用最新,最简单的方法来实现这一目标.

M. *_*num 20

UUID是一个不能简单地实例化的类.假设它作为请求参数出现,您应首先使用参数注释参数@RequestParam.

@RequestMapping("/MyController.myAction.mvc")
@ResponseBody
public String myAction(@RequestParam UUID id, String myParam)...
Run Code Online (Sandbox Code Playgroud)

现在,这需要一个请求参数,其名称id在请求中可用.该参数将转换为a UUID.然而,目前这将失败,因为目前没有任何东西可以从a转换String为a UUID.

为此创建一个Converter可以做到这一点.

public class StringToUUIDConverter implements Converter<String, UUID> {
    public UUID convert(String source) {
        return UUID.fromString(source);
    }
}
Run Code Online (Sandbox Code Playgroud)

将此类挂钩到ConversionService,您应该对请求参数进行UUID转换.(如果它是一个请求标题,这也可以工作,基本上是为了进入的所有内容ConversionService).您也可能想要Converter使用另一种方式(UUID - > String).

将它连接到Spring MVC在参考指南中很好地解释(假设你使用xml配置).但简而言之:

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

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="org.company.converter.StringToUUIDConverter"/>
        </set>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

注意:从Spring 3.2 Spring a StringToUUIDConverter开始,它会自动注册.


izi*_*tti 6

从版本3.2开始,下面的转换器在Spring Framework(核心)中可用.

org.springframework.core.convert.support.StringToUUIDConverter<String, java.util.UUID>
Run Code Online (Sandbox Code Playgroud)