如何在Spring中注册自定义类型转换器?

时间:2020-03-05 18:54:48  来源:igfitidea点击:

我需要通过http请求参数传递一个UUID实例。 Spring需要自定义类型转换器(来自String)进行注册。如何注册一个?

解决方案

回答

不确定我们要问什么?

Spring带有CustomEditorConfigurer来提供自定义String <-> Object转换器。

要使用此功能,只需将CustomEditorConfigurer作为bean添加到配置中,然后添加自定义转换器。但是,这些转换程序通常在将配置文件中的字符串属性转换为真实对象时使用。

如果我们使用的是Spring MVC,请查看带注释的MVC的部分。

具体来说,看看@RequestParam和@ModelAttribute批注吗?

希望这可以帮助?

回答

请在此处查看弹簧参考手册的第5章:5.4.2.1. 注册其他自定义PropertyEditor

回答

我有一个带有RequestMapping批注的MVC控制器。一种方法的参数类型为UUID。
感谢工具包,在阅读了有关WebDataBinder的知识之后,我发现我的控制器中需要这样的方法:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(UUID.class, new UUIDEditor());
}

UUIDEditor只是扩展了PropertyEditorSupport并覆盖了getAsText()和setAsText()。

很好地为我工作。

回答

在扩展前面的示例。

控制器类

@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)) ;
  }

}