一、Spring请求参数绑定流程:

1、请求参数绑定流程:

我们在开发的时候,经常会从html,jsp中将请求参数通过request对象传递到后台,可是经常会遇到这么一种情况,那就是传过来的数据到后台后,还要再组装成一种对象的格式。

2、Spring中请求参数绑定:

Spring可以自动将request中的请求参数数据绑定到对象的每个property上,但是只会绑定一些简单数据类型(比如Strings,int,float)到对应的对象中。可是如果面对复杂的对象,那就要借助PropertyEditor接口来帮助我们完成复杂对象的绑定。

PropertyEditor这个接口提供了两个方法,一个方法是将String类型的值转成property对应的数据类型,另一个方法是将property转成String。

3、CustomDateEditor继承关系:

4、示例代码:

@InitBinder
public void InitBinder(WebDataBinder binder) {//前端传入的时间格式必须是"yyyy-MM-dd"效果!DateFormat df = new SimpleDateFormat("yyyy-MM-dd");CustomDateEditor dateEditor = new CustomDateEditor(df, true);binder.registerCustomEditor(Date.class, dateEditor);
}

二、@InitBinder详解:

1、@InitBinder注解简介:

@InitBinder作用于@Controller中的方法,表示为当前控制器注册一个属性编辑器,对WebDataBinder进行初始化,且只对当前的Controller有效,一般用做BaseController对数据进行预处理操作。

2、@InitBinder执行时机:

@InitBinder注解被解析的时机,是其所标注的方法,在该方法被请求执行之前。同时@InitBinder标注的方法是可以多次执行的,也就是说来一次请求就执行一次@InitBinder解析。

3、@InitBinder执行原理:

当某个Controller上的第一次请求,由于SptingMVC前端控制器匹配到该Controller之后,根据Controller的class类型来查找所有标注了@InitBinder注解的方法,并且存入RequestMappingHandlerAdapter里的initBinderCache缓存中。等下一次请求执行对应业务方法之前,会先走initBinderCache缓存,而不再去解析@InitBinder。

4、@InitBinder的使用:

@InitBinder注解的方法可以对WebDataBinder初始化;WebDataBinder是用于表单到方法的数据绑定的,WebDataBinder中有很多方法可以对数据绑定进行具体的设置:

1)比如我们设置name属性为非绑定属性(也可以设置绑定值setAllowedFields):

@InitBinder
public void initBinder(WebDataBinder binder) {binder.setDisallowedFields("name");

该字段在表单提交时就不会提交上去。

2)对页面数据进行解析绑定:

以时间为例,在Controller中接收的是Date类型,而请求的参数为String类型时,如果没有加@InitBinder的效果:

@Controller
public class MyController {@RequestMapping("baseTest")@ResponseBodypublic String baseTest(Date date){return String.valueOf(date);}
}

页面结果:由于语法格式有误,服务器无法理解此请求

有两种实现方式:

  • 使用Spring提供的实现类CustomDateEditor
public class BaseController {@InitBinderprotected void initBinder(WebDataBinder binder){SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");binder.registerCustomEditor(Date.class,new CustomDateEditor(dateFormat, true));}
  • 自定义实现类MyDateEditor
public class BaseController {@InitBinderprotected void initBinder(WebDataBinder binder){binder.registerCustomEditor(Date.class,new MyDateEditor());}private class MyDateEditor extends PropertyEditorSupport{@Overridepublic void setAsText(String text) throws IllegalArgumentException {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = null;try {date = format.parse(text);} catch (ParseException e) {format = new SimpleDateFormat("yyyy-MM-dd");try {date = format.parse(text);} catch (ParseException e1) {}}setValue(date);}}
}

运行结果:

更多例子可以参考:springMVC之@InitBinder的用法

参考文章:SpringMVC中@InitBinder注解介绍与使用
参考文章:SpringBoot2教程29整合SpringMVC之@InitBinder处理请求参数的绑定

SpringMVC中的@InitBinder注解【记录】相关推荐

  1. 在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案

    在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案 参考文章: (1)在SpringMVC中使用@RequestBody注解处理json ...

  2. SpringMVC中使用@ResponseBody注解标注业务方法

    SpringMVC中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面 导包: 除了一些spring的包之外,还需要jackson-annotations.jar ...

  3. springMVC中的@ModelAttribute注解

    springMVC小总结 常用注解总结 以下内容是我个人对@ModelAttribute注解的见解,如有错误请批评指正!!! 例子中用到的代码:代码获取 @ModelAttribute注解 1.作用: ...

  4. springmvc中的全注解模式

    1.贴在类上: @Controller表明其是一个控制器 2.贴在方法上: @requestMapping("/xxx"): 标明请求要访问的方法的资源路径,,需以/打头.其中省略 ...

  5. 详细分析@InitBinder注解的使用和原理

    前言 由@InitBinder注解修饰的方法用于初始化WebDataBinder对象,能够实现:从request获取到handler方法中由@RequestParam注解或@PathVariable注 ...

  6. SpringMVC中注解@RequestBody和@ResponseBody的使用区别

    首先上源码 在面试时经常会问到我们如何使用SpringMVC将Http请求转换为java对象,或者又是问如何将结果转换为java的呢? SpringMVC在接收到请求之后HandlerMapping像 ...

  7. SpringMVC之@InitBinder注解详解

    说明与作用 springmvc并不是能对所有类型的参数进行绑定的,如果对日期Date类型参数进行绑定,就会报错IllegalStateException错误.所以需要注册一些类型绑定器用于对参数进行绑 ...

  8. SpringMVC之@InitBinder注解(日期转换)

    @InitBinder注解的作用: springmvc并不是能对所有类型的参数进行绑定的,如果对日期Date类型参数进行绑定,就会报错IllegalStateException错误.所以需要注册一些类 ...

  9. SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换)

    Spring3.1开始使用新的HandlerMapping 和 HandlerAdapter 来支持@Contoller 和@RequestMapping注解处理:处理器映射RequestMappin ...

最新文章

  1. TOP10全球ICT技术发展趋势
  2. 冲出UAC-解决Win UAC问题的编程经验
  3. 2019春季学期进度报告(十六)
  4. DrawerLayout侧滑详解
  5. 求生之路2浩方联机开始显示服务器,求生之路2怎么联机_求生之路2浩方联机教程_快吧单机游戏...
  6. 夫曼编码译码系统课程设计实验报告(含源代码c++_c语言),哈夫曼编码译码系统课程设计实验报告(含源代码C++_C语言)[1]...
  7. MySQL笔记(二)基础的增删改查
  8. 【深入理解Java虚拟机学习笔记】第三章 垃圾收集器与内存分配策略
  9. 比尔·盖茨:我不认为中国AI能弯道超车
  10. Jflash 工程配置及下载
  11. WeChat8Xposed通用hook框架适配新版微信-单元测试适配新微信
  12. html象棋游戏源码分享
  13. 小米盒子显示连不上服务器,小米盒子连不上WiFi?这七个技巧绝对管用
  14. 小学计算机考核,小学信息技术学科考核评价方案.docx
  15. 【飞飞CMS二次开发实录】开篇:安装与运行
  16. 获取历史连接wifi的密码(实测好用)
  17. iPhone7产业链不为人知的辛酸
  18. php 月柱计算,月柱推算
  19. C语言程序设计(郝斌)
  20. DNS服务器可能不可用

热门文章

  1. 观看慕课老师milanlover视频include指令+include动作+forward动作+param动作
  2. Maya2013安装失败:Installing Microsoft Visual C++ 2005
  3. python成语游戏代码_一件有趣的事:用Python 爬了爬自己的微信朋友,有源代码。...
  4. 揭秘微软超级麻将AI Suphx,破解非完美信息游戏
  5. android 手表和手机图片,一图看懂小米手表/Color连接iPhone/安卓手机的功能差别
  6. 逻辑回归(LR)的原理及其推导
  7. 分账如何帮助平台型企业解决税务问题?
  8. 美国服务器对网站SEO优化有哪些影响
  9. Adobe Illustrator CC 2023(AI2023)安装教程与下载方式
  10. 上变频的matlab实现,数字下变频Matlab 仿真