SpringMVC(三)数据绑定

一、数据绑定介绍

将请求数据与后台方法参数建立连接的过程叫做SpringMVC的数据绑定。
主要分为简单数据绑定和复杂数据绑定。

在这里插入图片描述
关于图中的描述:
(1)Spirng MVC将ServletRequest 对象传递给数据绑定组件(DataBinder)。
(2)将处理方法的入参对象传递给DataBinder。
(3)DataBinder调用ConversionService组件进行数据类型转换/格式化等工作,并将对象值填充到参数对象中。
(4)调用Validator组件,对参数对象今夕数据校验。
(5)生成数据绑定结果BindingResult对象,赋值给方法的响应参数。

二、简单数据绑定

1、绑定默认数据类型

常用的默认参数类型

  • HttpServletRequest:通过request对象获取请求。
  • HttpServletResponse:通过response处理响应信息。
  • HttpSession:通过Session对象得到session中的对象。
  • Model/ModelMap:Mdoel是一个接口,ModelMap是一个接口实现,将model数据填充到request域。

以HttpServletRequest为例:
输入路径:http://localhost:8080/firstController?id=3
在这里插入图片描述

2、绑定简单数据类型

八种基本数据类型及对应的封装类型的绑定

    @RequestMapping(value ="/firstController")
    public String handleRequest(int id) {
    
    
        System.err.println("id=" + id);
        return "first";
    }
注:前端请求的参数名可能与后台参数不一致,所有提供了@RequestParam注解

在这里插入图片描述
请求路径: http://localhost:8080/firstController?user_id=3

    @RequestMapping(value ="/firstController")
    public String handleRequest(@RequestParam(value = "user_id") int id) {
    
    
        System.err.println("id=" + id);
        return "first";

    }

3、绑定POJO类型

POJO类型的绑定就是将所有关联的请求参数封装在一个POJO中,然后在方法中直接使用该POJO作为形参来完成数据绑定。

    @RequestMapping(value ="/registerUser")
    public String handleRequest(UserEntity userEntity) {
    
    
        System.err.println(userEntity.getName());
        System.err.println(userEntity.getPwd());
        return "first";
    }

public class UserEntity{
    
    

    private Integer id;
    private String name;
    private String pwd;
    ...
    ...set get方法
}

4、绑定保证POJO类型

所谓的包装POJO,就是在一个POJO中包含另一个简单的POJO。例如订单对象中包含用户信息。

5、绑定自定义数据类型

日期数据需要自定义转换器(Converter)或格式化(Formatter)来进行绑定

(1)converter

//实现Converter 第一个是源类型, 第二个是目标类型(从String类型转成Date类型)
public class DateConverter implements Converter<String, Date> {
    
    
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    @Override
    public Date convert(String source) {
    
    
        Date date = null;
        try {
    
    
            date = sdf.parse(source);
        } catch (ParseException e) {
    
    
            e.printStackTrace();
        }
        return date;
    }
}

在springmvc-config.xml文件进行配置

    <mvc:annotation-driven conversion-service="conversionService" />
    
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
      <property name="converters">
         <set>
            <bean class="converter.DateConverter" />
         </set>
     </property>
     </bean>
    @RequestMapping("/converterDate")
    public String  converterDate(Date date){
    
    
        System.err.println(date);
        return "first";
    }

访问:http://localhost:8080/converterDate?date=2017-04-12 15:55:55

(2)formatter

//实现Formatter                                 目标类型
public class DateFormatter implements Formatter<Date> {
    
    
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    @Override
    public Date parse(String source, Locale locale) throws ParseException {
    
    
        return sdf.parse(source);
    }

    @Override
    public String print(Date date, Locale locale) {
    
    
        return sdf.format(date);
    }
}

在springmvc-config.xml文件进行配置

    <mvc:annotation-driven conversion-service="conversionService" />

    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="formatters">
            <set>
                <bean class="formatter.DateFormatter" />
            </set>
        </property>
    </bean>
    @RequestMapping("/converterDate")
    public String  converterDate(Date date){
    
    
        System.err.println(date);
        return "first";
    }

访问:http://localhost:8080/converterDate?date=2017-04-12 15:55:55

三、复杂数据绑定

1、绑定数组

在这里插入图片描述

2、绑定集合

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38618691/article/details/115302166