SpringMVC中@InitBinder注解介绍与使用

客官°小女子只卖身不卖艺 2022-03-22 13:23 556阅读 0赞

@InitBinder注解的方法可以对WebDataBinder初始化。webDataBinder是用于表单到方法的数据绑定的!

@InitBinder只在@Controller中注解方法来为这个控制器注册一个绑定器初始化方法,方法只对本控制器有效
一般用做BaseController对数据进行设置

  • WebDataBinder中有很多方法可以对数据绑定进行具体的设置:比如我们设置name属性为非绑定属性(也可以设置绑定值setAllowedFields):

    @InitBinder

    1. public void initBinder(WebDataBinder binder) {
    2. binder.setDisallowedFields("name");

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

对页面数据进行解析绑定

在使用SpingMVC框架的项目中,经常会遇到页面某些数据类型是Date、Integer、Double等的数据要绑定到控制器的实体,或者控制器需要接受这些数据,如果这类数据类型不做处理的话将无法绑定。
以时间为例先看没有加@Initbinder的效果
Controller层

  1. @Controller
  2. public class MyController {
  3. @RequestMapping("baseTest")
  4. @ResponseBody
  5. public String baseTest(Date date){
  6. System.out.println("------"+date);
  7. return String.valueOf(date);
  8. }
  9. }

页面结果:由于语法格式有误,服务器无法理解此请求
在这里插入图片描述

以时间为例有两种实现方法

  1. @Controller
  2. public class MyController extends BaseController {
  3. @RequestMapping("baseTest")
  4. @ResponseBody
  5. public String baseTest(Date date){
  6. System.out.println("------"+date);
  7. return String.valueOf(date);
  8. }
  9. }

1、使用Spring提供的实现类CustomDateEditor

  1. public class BaseController {
  2. @InitBinder
  3. protected void initBinder(WebDataBinder binder){
  4. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  5. binder.registerCustomEditor(Date.class,new CustomDateEditor(dateFormat, true));
  6. }

2、自定义实现类MyDateEditor

  1. public class BaseController {
  2. @InitBinder
  3. protected void initBinder(WebDataBinder binder){
  4. binder.registerCustomEditor(Date.class,new MyDateEditor());
  5. }
  6. private class MyDateEditor extends PropertyEditorSupport{
  7. @Override
  8. public void setAsText(String text) throws IllegalArgumentException {
  9. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  10. Date date = null;
  11. try {
  12. date = format.parse(text);
  13. } catch (ParseException e) {
  14. format = new SimpleDateFormat("yyyy-MM-dd");
  15. try {
  16. date = format.parse(text);
  17. } catch (ParseException e1) {
  18. }
  19. }
  20. setValue(date);
  21. }
  22. }
  23. }

运行结果
在这里插入图片描述
还有CustomBooleanEditor、CustomNumberEditor就没有一一列举了。

发表评论

表情:
评论列表 (有 0 条评论,556人围观)

还没有评论,来说两句吧...

相关阅读