SpringMVC中@InitBinder注解介绍与使用

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

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

  • WebDataBinder中有很多方法可以对数据绑定进行具体的设置:比如我们设置name属性为非绑定属性(也可以设置绑定值setAllowedFields):
@InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.setDisallowedFields("name");

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

对页面数据进行解析绑定

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

@Controller
public class MyController {
    @RequestMapping("baseTest")
    @ResponseBody
    public String baseTest(Date date){
        System.out.println("------"+date);
        return String.valueOf(date);
    }
}

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

以时间为例有两种实现方法
@Controller
public class MyController extends BaseController {
    @RequestMapping("baseTest")
    @ResponseBody
    public String baseTest(Date date){
        System.out.println("------"+date);
        return String.valueOf(date);
    }
}

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

public class BaseController {

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

2、自定义实现类MyDateEditor

public class BaseController {

    @InitBinder
    protected void initBinder(WebDataBinder binder){
        binder.registerCustomEditor(Date.class,new MyDateEditor());
    }

    private class MyDateEditor extends PropertyEditorSupport{
        @Override
        public 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);
        }
    }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值