资讯专栏INFORMATION COLUMN

3.13、@InitBinder 和 WebDataBinder

dreamGong / 3179人阅读

摘要:标记初始化的方法,被用于填充被注解的处理方法的命令和表单对象参数。初始化绑定器方法必须不带返回值,所以它们通常被声明为的。典型的参数包括和或者,允许用代码方式注册特定上下文的编辑器。详情见使用和通知控制器一节。

  这一部分示例见这个项目的 mvc 分支下的 WebDataBinderController.java

① 用@InitBinder自定义数据绑定

  用@InitBinder注解的控制器方法,允许你直接在你的控制器类中配置 Web 数据绑定。@InitBinder标记初始化WebDataBinder的方法,WebDataBinder被用于填充被注解的处理方法的命令和表单对象参数。

  这些初始化绑定器(Init-binder)方法支持@RequestMapping方法支持的所有参数,处理命令/表单对象以及相关的校验结果对象。初始化绑定器方法必须不带返回值,所以它们通常被声明为 void 的。典型的参数包括WebDataBinderWebRequest或者java.util.Locale,允许用代码方式注册特定上下文的编辑器(context-specific editors)。

  下面的例子演示了使用@InitBinder为所有的java.util.Date表单属性配置一个CustomDateEditor

@Controller
public class MyFormController 
{
    @InitBinder
    protected void initBinder(WebDataBinder binder) 
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
    }

    // ...
}

  相对地,从 Spring 4.2 开始,考虑使用addCustomFormatter来指定Formatter实现以代替PropertyEditor实例。如果你恰好在一个共享的FormattingConversionService中也有一个个基于Formatter的设置(setup),这会非常用,同样的规则可以用重用于控制器指定的绑定规则的变化:

@Controller
public class MyFormController 
{
    @InitBinder
    protected void initBinder(WebDataBinder binder) 
    {
        binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd"));
    }
    // ...
}
② 配置一个自定义的WebBindingInitializer

  为了表达(externalize)数据绑定初始化,你可以提供一个自定义的WebBindingInitializer接口实现,然后你可以通过为RequestMappingHandlerAdapter来提供一个自定义 Bean 配置来启动WebBindingInitializer,所以要重写默认配置。

  下面的例子来自 PetClinic 应用程序(虽然文档上说了一下,可我也不知道这个项目在哪里……),展示了一个配置,使用一个自定义WebBindingInitializer接口实现——org.springframework.samples.petclinic.web.ClinicBindingInitializer,它配置的PropertyEditors需要几个控制器。


    
    
        
    

  @InitBinder方法也可以定义在一个带有@ControllerAdvice注解的类中,在这种情况下,它们用于匹配控制器。这提供了一个使用WebBindingInitializer的代替方法。详情见“使用@ControllerAdvice@RestControllerAdvice通知控制器一节”。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66058.html

相关文章

  • ControllerAdvice拦截器

    摘要:看成提供的一个特殊的拦截器。是一个,用于定义最主要用途,和方法,适用于所有使用方法拦截。为所有封装统一异常处理代码。为所有设置全局变量。用于为所有设置某个类型的数据转换器。 Spring3.2开始提供的新注解,控制器增强(AOP),最主要的应用是做统一的异常处理。@ControllerAdvice(看成spring mvc提供的一个特殊的拦截器)。@ControllerAdvice是一...

    caohaoyu 评论0 收藏0
  • Spring处理器(Controller)全局建言

    摘要:我们可以写一个类,在上面注解控制器建言可以有三种建言第一步编写全局建言类你可以在目录下编写一个类我建议放在工具包下如图很简单的我们就创建了的增强器第二步编写功能增强器有三种功能全局异常增强通过的属性过滤拦截的条件,可以拦截所有的表单初始化增 @ControllerAdvice我们可以写一个类,在上面注解@ControllerAdvice控制器建言可以有三种建言: 第一步:编写全局建言类...

    bovenson 评论0 收藏0
  • SpringMVC之Controller常用注解功能全解析

    摘要:分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了注解。这种绝对路径和相对路径所组合成的最终路径都是相对于根路径而言的。属性属性主要是用于限制能够访问的方法类型的。属性的用法和功能与属性相似。使用标记的参数。 一、简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封...

    wanghui 评论0 收藏0
  • 一次线上问题的排查解决过程

    摘要:排查异常日志,发现没有该问题存在。测试功能正常,没有重现线上问题。解决问题原因定位好了,剩下的就是如何解决了。两个方案修改线上配置该上实施难度系数高,因为公司使用的统一发布部署平台,开发人员无服务器操作权限。 问题 XX系统中,一个用户需要维护的项目数过多,填写的任务数超多,产生了一次工时保存中,只有前面一部分的xx数据持久化到数据库,后面的数据没有保存。 图1 showImg(htt...

    宋华 评论0 收藏0
  • 一次线上问题的排查解决过程

    摘要:排查异常日志,发现没有该问题存在。测试功能正常,没有重现线上问题。解决问题原因定位好了,剩下的就是如何解决了。两个方案修改线上配置该上实施难度系数高,因为公司使用的统一发布部署平台,开发人员无服务器操作权限。 问题 XX系统中,一个用户需要维护的项目数过多,填写的任务数超多,产生了一次工时保存中,只有前面一部分的xx数据持久化到数据库,后面的数据没有保存。 图1 showImg(htt...

    airborne007 评论0 收藏0

发表评论

0条评论

dreamGong

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<