-
什么是数据绑定
在客户端向服务端发送请求的过程中,可能有参数,此时我们需要在处理器方法的形参获取此参数。所以就需要对请求参数和方法上的形参进行建立连接。连接的过程中就是数据绑定。 -
数据绑定的原理
SpringMVC会把ServletRequest传递给DataBinder,然后把形参上的对象传递给DataBinder,DataBinder调用ConversionServlet进行数据类型转换和格式化,并把数据填充到对象中。然后校验是否合法,合法的话就生成BindingResult,把数据赋值给处理器方法上的形参。
数据绑定分为简单数据绑定和复杂数据绑定
一、简单数据类型绑定 -
默认类型数据绑定
常见的默认类型- HttpServletRequest:获取请求信息
- HttpServletResponse:处理响应信息
- HttpSession:获取session中存放的信息
- Model/ModelMap:Model是一个接口,ModelMap是一个类,Model的实现类对象和ModelMap对象都可以设置model数据,model数据会填充到request域。
-
简单数据类型数据绑定
形参是java的简单数据类型。如String,int等。
7. POJO绑定
一般情况传输的数据较多,所以需要用类将其封装,形参只要用对象去接收就好,不用写太多的简单数据类型。
-
自定义转换器
springmvc没有帮我们把字符串转为日期,所以需要自己配置
springmvc.xml配置
<!--声明自定义类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.lzx.DateConverter"></bean>
</set>
</property>
</bean>
<mvc:annotation-driven conversion-service="conversionService"/>
自定义类
/**
* 1.自定义日期类型转换器,实现Convert接口(S,R)
* S-原始类型
* R-转换后类型
*/
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String dateStr) {
Date date=null;
try {
date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
二、复杂数据绑定
-
数组
-
集合,需要@RequestParam注解。postman发送方式同数组一样
-
复杂POJO ,属性可能有对象 list map 数组等复杂类型
- 对象
- 接口
- postman传输格式
- 对象
-
Json数据格式传输
因为Json数据解析速度更快,占用空间更小,所以一般开发用Json数据传输。
springmvc中导入依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
springmvc.xml配置
<!--配置mvc的注解驱动-->
<mvc:annotation-driven/>
- @PathValiable,@RequestParam,@ResponseBody的区别?
@RequestParam:接收url传参和表单传参
@ResponseBody:接收Json数据
@PathValiable:接收restful风格的请求,如/{id}
代码:https://gitee.com/lin_zixiang/programming-daily/tree/master/springmvc_restful