在Spring MVC中绑定UUID的最简单方法是什么,这样可以:
@RequestMapping("/MyController.myAction.mvc") @ResponseBody public String myAction(UUID id, String myParam)...
使用上面我当前获得以下异常:
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.()
还有其他问题围绕着这个,但似乎没有人回答它.我正在使用Spring 3.latest(实际上是4 EA).我正在采用最新,最简单的方法来实现这一目标.
UUID
是一个不能简单地实例化的类.假设它作为请求参数出现,您应首先使用参数注释参数@RequestParam
.
@RequestMapping("/MyController.myAction.mvc") @ResponseBody public String myAction(@RequestParam UUID id, String myParam)...
现在,这需要一个请求参数,其名称id
在请求中可用.该参数将转换为a UUID
.然而,目前这将失败,因为目前没有任何东西可以从a转换String
为a UUID
.
为此创建一个Converter
可以做到这一点.
public class StringToUUIDConverter implements Converter<String, UUID> { public UUID convert(String source) { return UUID.fromString(source); } }
将此类挂钩到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>
注意:从Spring 3.2 Spring a StringToUUIDConverter
开始,它会自动注册.
从版本3.2开始,下面的转换器在Spring Framework(核心)中可用.
org.springframework.core.convert.support.StringToUUIDConverter<String, java.util.UUID>