3.13、@InitBinder 和 WebDataBinder
这一部分示例见这个项目的 mvc 分支下的 WebDataBinderController.java
① 用@InitBinder
自定义数据绑定
用@InitBinder
注解的控制器方法,允许你直接在你的控制器类中配置 Web 数据绑定。@InitBinder
标记初始化WebDataBinder
的方法,WebDataBinder
被用于填充被注解的处理方法的命令和表单对象参数。
这些初始化绑定器(Init-binder)方法支持@RequestMapping
方法支持的所有参数,处理命令/表单对象以及相关的校验结果对象。初始化绑定器方法必须不带返回值,所以它们通常被声明为 void 的。典型的参数包括WebDataBinder
和WebRequest
或者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相关推荐
- InitBinder
InitBinder注解 WebDataBinder用于完成表单字段到JavaBean属性的绑定,而@InitBinder注解则可以对WebDataBinder对象进行初始化,以及数据设定的相关限制. ...
- 《Spring 5 官方文档》18. Web MVC 框架(五)
自定义WebDataBinder初始化 要通过Spring定制与PropertyEditor的请求参数绑定 WebDataBinder,可以使用@InitBinder控制器中的-annotated @ ...
- SpringMVC 执行流程解析
SpringMVC 执行流程解析 注:SpringMVC 版本 5.2.15 上面这张图许多人都看过,本文试图从源码的角度带大家分析一下该过程. 1. ContextLoaderListener 首先 ...
- @Valid对页面传参的校验问题
我们在做Form表单提交的时候,只在前端做数据校验是不够安全的,所以有时候我们需要在后端同样做数据的校验.此处使用Valid接口的实现类做数据校验. 需要注意的是:@Valid要紧挨着JavaBean ...
- SpringMVC-表单验证
本文转自https://blog.csdn.net/deargua/article/details/51586823 1.mvc:annotation-driven 实际开发时建议都配置该参数. 配置 ...
- mahout安装测试
Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序.Apa ...
- SpringBoot之@ControllerAdvice,@ModelAttribute,@InitBinder详解
@ControllerAdvice 在 SpringBoot 中,@ControllerAdvice 通常结合 @ExceptionHandler 注解处理全局异常,全局异常处理详见第 13 章:通过 ...
- SSM-SpringMVC-30:SpringMVC中InitBinder的骇客级优化
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 上篇博客利用initbinder做了局部的日期类型转换,但是兼容性不要,只支持yyyy-MM-dd这种,所以 ...
- springMVC注解@initbinder日期类型的属性自动转换
在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支持这个格式的转换,所以必须要手动配置, 自定义数据类型的绑定才能实现这个功能. 一 ...
- [Spring MVC] - InitBinder验证
Spring MVC使用InitBinder验证: 使用InitBinder做验证的情况一般会在此Controller中提交的数据需要有一些是业务性质的,也即比较复杂的验证情况下才会使用.大部份简单的 ...
最新文章
- iOS 应用性能测试的相关方法、工具及技巧
- 二叉树的右视图—leetcode199
- 湘潭大学oracle考试,湘潭大学07级《oracle数据库》A卷及其部分参考答案
- python 安装包列表导出到 txt
- shader LOD快速生成具体是种怎样的技术?
- python将字典写入csv_Python如何把字典写入到CSV文件的方法示例
- BZOJ2038 小Z的袜子 (莫队算法)
- np.percentile获取中位数、百分位数
- java 地图渲染_离屏渲染在车载导航中的应用
- 大数据有十大应用领域,看看你用到了哪个?
- 洛必达法则-求导的方法求解出极限
- BEGAN(Boundary Equilibrium GenerativeAdversarial Networks)-pyTorch实现
- 运动垫的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- vmware虚拟机序列号
- mkdir -p的含义
- 程序员视角m1 Macbook air使用指南和指令备忘录
- android 经典rpg,安卓TOP10:SE经典RPG游戏《最终幻想7》领衔
- Ubuntu 18.04 安装RealSense D435教程
- virsh的详细命令解析
- 爬取安居客租房详情+翻页
热门文章
- 多小区下小区上行速率的计算(6)
- 5.0在python中是一个整数常量_python学习之路,基础篇-变量和常量
- 卡方检验用于特征选择
- 2018_09_21_生活记录_参加人工智能大会
- HDU5961 —— 传递【竞赛图】【判断传递闭包】
- 一道学吧上的题目,python3 - 解决高中的古典概率问题: 有A、B两个袋子。A袋中装有4个白球、2个黑球,B袋中装有3个白球、4个黑球。从A、B两个袋子中
- Chisel:一款基于HTTP的快速稳定TCPUDP隧道工具
- 1.恶意软件中的防双开
- linux安装json
- 面象对象与面象过程内存分区