我需要通过 http 请求参数传递一个 UUID 实例。Spring 需要注册一个自定义类型转换器(来自 String)。我如何注册一个?
4 回答
I have an MVC controller with RequestMapping annotations. One method has a parameter of type UUID. Thanks toolkit, after reading about WebDataBinder, I figured that I need a method like this in my controller:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(UUID.class, new UUIDEditor());
}
UUIDEditor simply extends PropertyEditorSupport and overrides getAsText() and setAsText().
Worked for me nicely.
请在此处查看弹簧参考手册的第 5 章:5.4.2.1。注册额外的自定义 PropertyEditor
扩展上一个示例。
控制器类
@Controller
@RequestMapping("/showuuid.html")
public class ShowUUIDController
{
@InitBinder
public void initBinder(WebDataBinder binder)
{
binder.registerCustomEditor(UUID.class, new UUIDEditor());
}
public String showuuidHandler (@RequestParam("id") UUID id, Model model)
{
model.addAttribute ("id", id) ;
return "showuuid" ;
}
}
财产拆迁者
class UUIDEditor extends java.beans.PropertyEditorSupport
{
@Override
public String getAsText ()
{
UUID u = (UUID) getValue () ;
return u.toString () ;
}
@Override
public void setAsText (String s)
{
setValue (UUID.fromString (s)) ;
}
}
不知道你在问什么?
Spring 带有一个CustomEditorConfigurer来提供自定义 String <-> Object 转换器。
要使用它,只需将 CustomEditorConfigurer 作为 bean 添加到您的配置中,然后添加自定义转换器。但是,这些转换器通常在将配置文件中的字符串属性转换为真实对象时使用。
如果您使用的是 Spring MVC,请查看注释 MVC部分
具体来说,看看@RequestParam和@ModelAttribute注释?
希望这可以帮助?