这一部分示例见这个项目的 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
{@InitBinderprotected 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
{@InitBinderprotected 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需要几个控制器。

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="cacheSeconds" value="0"/><property name="webBindingInitializer"><bean class="org.springframework.samples.petclinic.web.ClinicBindingInitializer"/></property>
</bean>

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

3.13、@InitBinder 和 WebDataBinder相关推荐

  1. InitBinder

    InitBinder注解 WebDataBinder用于完成表单字段到JavaBean属性的绑定,而@InitBinder注解则可以对WebDataBinder对象进行初始化,以及数据设定的相关限制. ...

  2. 《Spring 5 官方文档》18. Web MVC 框架(五)

    自定义WebDataBinder初始化 要通过Spring定制与PropertyEditor的请求参数绑定 WebDataBinder,可以使用@InitBinder控制器中的-annotated @ ...

  3. SpringMVC 执行流程解析

    SpringMVC 执行流程解析 注:SpringMVC 版本 5.2.15 上面这张图许多人都看过,本文试图从源码的角度带大家分析一下该过程. 1. ContextLoaderListener 首先 ...

  4. @Valid对页面传参的校验问题

    我们在做Form表单提交的时候,只在前端做数据校验是不够安全的,所以有时候我们需要在后端同样做数据的校验.此处使用Valid接口的实现类做数据校验. 需要注意的是:@Valid要紧挨着JavaBean ...

  5. SpringMVC-表单验证

    本文转自https://blog.csdn.net/deargua/article/details/51586823 1.mvc:annotation-driven 实际开发时建议都配置该参数. 配置 ...

  6. mahout安装测试

    Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序.Apa ...

  7. SpringBoot之@ControllerAdvice,@ModelAttribute,@InitBinder详解

    @ControllerAdvice 在 SpringBoot 中,@ControllerAdvice 通常结合 @ExceptionHandler 注解处理全局异常,全局异常处理详见第 13 章:通过 ...

  8. SSM-SpringMVC-30:SpringMVC中InitBinder的骇客级优化

     ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 上篇博客利用initbinder做了局部的日期类型转换,但是兼容性不要,只支持yyyy-MM-dd这种,所以 ...

  9. springMVC注解@initbinder日期类型的属性自动转换

    在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支持这个格式的转换,所以必须要手动配置, 自定义数据类型的绑定才能实现这个功能. 一 ...

  10. [Spring MVC] - InitBinder验证

    Spring MVC使用InitBinder验证: 使用InitBinder做验证的情况一般会在此Controller中提交的数据需要有一些是业务性质的,也即比较复杂的验证情况下才会使用.大部份简单的 ...

最新文章

  1. iOS 应用性能测试的相关方法、工具及技巧
  2. 二叉树的右视图—leetcode199
  3. 湘潭大学oracle考试,湘潭大学07级《oracle数据库》A卷及其部分参考答案
  4. python 安装包列表导出到 txt
  5. shader LOD快速生成具体是种怎样的技术?
  6. python将字典写入csv_Python如何把字典写入到CSV文件的方法示例
  7. BZOJ2038 小Z的袜子 (莫队算法)
  8. np.percentile获取中位数、百分位数
  9. java 地图渲染_离屏渲染在车载导航中的应用
  10. 大数据有十大应用领域,看看你用到了哪个?
  11. 洛必达法则-求导的方法求解出极限
  12. BEGAN(Boundary Equilibrium GenerativeAdversarial Networks)-pyTorch实现
  13. 运动垫的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. vmware虚拟机序列号
  15. mkdir -p的含义
  16. 程序员视角m1 Macbook air使用指南和指令备忘录
  17. android 经典rpg,安卓TOP10:SE经典RPG游戏《最终幻想7》领衔
  18. Ubuntu 18.04 安装RealSense D435教程
  19. virsh的详细命令解析
  20. 爬取安居客租房详情+翻页

热门文章

  1. 多小区下小区上行速率的计算(6)
  2. 5.0在python中是一个整数常量_python学习之路,基础篇-变量和常量
  3. 卡方检验用于特征选择
  4. 2018_09_21_生活记录_参加人工智能大会
  5. HDU5961 —— 传递【竞赛图】【判断传递闭包】
  6. 一道学吧上的题目,python3 - 解决高中的古典概率问题: 有A、B两个袋子。A袋中装有4个白球、2个黑球,B袋中装有3个白球、4个黑球。从A、B两个袋子中
  7. Chisel:一款基于HTTP的快速稳定TCPUDP隧道工具
  8. 1.恶意软件中的防双开
  9. linux安装json
  10. 面象对象与面象过程内存分区