springmvc_3_数据转换 & 数据格式化 & 数据校验

/**
     * 可行
     * http://127.0.0.1:8080/laweyecloud/springmvc/pojo1?id=1&name=hh&password=222
     * @param poJo1
     * @param uiModel
     * @return
     */
    @RequestMapping("pojo1")
    public String POJOTest1(
            PoJo1 poJo1,
            Model uiModel
            ){
        uiModel.addAttribute("key1", poJo1);
        return "springmvc/POJO";
    }

    /**
     * 不可行,都是null,不能自动绑定
     * http://127.0.0.1:8080/laweyecloud/springmvc/pojo3?poJo1.id=1&poJo1.name=hh&poJo1.password=222&poJo2.id=22&poJo2.name=222&poJo2.fathe=hgj
     * @param poJo1
     * @param poJo2
     * @param uiModel
     * @return
     */
    @RequestMapping("pojo3")
    public String POJOTest3(
            PoJo1 poJo1,
            PoJo2 poJo2,
            Model uiModel
            ){
        uiModel.addAttribute("key1", poJo1);
        uiModel.addAttribute("key2", poJo2);
        return "springmvc/POJO";
    }

    /**
     * 数据绑定流程(就是springmvc自动的将页面传入的参数,转换为方法入参对应的参数类型)
     * • 1. Spring MVC 主框架将 ServletRequest 对象及目标方
法的入参实例传递给 WebDataBinderFactory 实例,以创
建 DataBinder 实例对象
• 2. DataBinder 调用装配在 Spring MVC 上下文中的
ConversionService 组件进行数据类型转换、数据格式
化工作。将 Servlet 中的请求信息填充到入参对象中
• 3. 调用 Validator 组件对已经绑定了请求消息的入参对象
进行数据合法性校验,并最终生成数据绑定结果
BindingData 对象
• 4. Spring MVC 抽取 BindingResult 中的入参对象和校验
错误对象,将它们赋给处理方法的响应入参

自定义类型转换器
• ConversionService 是 Spring 类型转换体系的核心接口。
• 可以利用 ConversionServiceFactoryBean 在 Spring 的 IOC
容器中定义一个 ConversionService. Spring 将自动识别出
IOC 容器中的 ConversionService,并在 Bean 属性配置及
Spring MVC 处理方法入参绑定等场合使用它进行数据的转换
• 可通过 ConversionServiceFactoryBean 的 converters 属性
注册自定义的类型转换器
     */

    @RequestMapping("pojo4")
    public String POJOTest4(
            PoJo1 poJo1,
            PoJo2 poJo2,
            Model uiModel
            ){
        uiModel.addAttribute("key1", poJo1);
        uiModel.addAttribute("key2", poJo2);
        return "springmvc/POJO";
    }
    /**
     * 两个参数对象被赋予相同的参数
        解决办法@InitBinder

        @InitBinder
        • 由 @InitBinder 标识的方法,可以对 WebDataBinder 对
        象进行初始化。WebDataBinder 是 DataBinder 的子类,用
        于完成由表单字段到 JavaBean 属性的绑定

        • @InitBinder方法不能有返回值,它必须声明为void。

        • @InitBinder方法的参数通常是是 WebDataBinder
     * @InitBinder
     */
    @InitBinder("poJo1")
    public void initPojo1(WebDataBinder binder){
        binder.setIgnoreInvalidFields(true);
        binder.setFieldDefaultPrefix("poJo1.");
    }
    @InitBinder("poJo2")
    public void initPojo2(WebDataBinder binder){
        binder.setIgnoreInvalidFields(true);
        binder.setFieldDefaultPrefix("poJo2.");
    }

    @RequestMapping("DateTimeFormat")
    public String DateTimeFormatTest(
            DateTest dateTest
            ){
        System.out.println(dateTest);
        return "springmvc/POJO";
    }
    /**
     * 设置日期类型自动转换
     * @param binder
     */
    @InitBinder
    public void initDateBinder(WebDataBinder binder){
        SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
        CustomDateEditor editor = new CustomDateEditor(format, true);
        binder.registerCustomEditor(Date.class, editor);
    }

    @RequestMapping("valid")
    public String valid(
            @Valid ValidTest validTest,
            BindingResult bindingResult
            ){
        if (bindingResult.hasErrors()) {
            return "springmvc/valid";
        }
        System.out.println(validTest);
        return "springmvc/valid";
    }

    @RequestMapping("toRequestBodyPage")
    public String toRequestBodyPage(){
        return "springmvc/RequestBody";
    }
package com.itrus.laweyecloud.springmvc;

public class PoJo1 {

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    private Long id;
    private String name;
    private String password;
}
package com.itrus.laweyecloud.springmvc;

public class PoJo2 {

    private Long id;
    private String name;
    private String father;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getFather() {
        return father;
    }
    public void setFather(String father) {
        this.father = father;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值