springMVC启动映射
- 启动时将@RequestMapping配置内容保存到处理器映射HandlerMapping中
- 通过拦截请求与HandlerMapping匹配,找到对应处理器
- 将处理器和拦截器保存到HandlerExecutionChain对象中,返回给DispatcherServlet
这样DispatcherServlet就可以运行它们了
springMVC提供注解
- @RequestParam 可以设置请求的参数名称,默认不能为空
使用required=false设置参数值可为空 - @PathVariable 获取url参数
- @DateTimeFormat 日期格式化
- @NumberFormat 数字格式化
- springboot日期格式化也可以使用配置文件spring.MVC.data-Format=yyyy-MM-dd
自定义参数转换规则
- 转换http请求体(body)会调用HttpMessageConverter接口方法对请求体的信息进行转换
* 先调用canRead,判断可读后进行read,将json转换成java对象
springMVC通过WebDataBinder获取参数
- 作用是解析http请求的上下文,在控制器调用之前转换参数并且提供验证功能,为调用控制器方法做准备
- 处理器从http请求中读取数据,通过接口Converter,Formatter,GenericConverter进行各类参数转换
- 使用DefaultFormattingConversionService管理转换类
springboot参数转换规则
自动配置类WebMvcAutoConfiguration的内部类WebMVCAutoConfigurationAdapter
Converter一对一转换器
GenericConverter集合和数组转换
数据验证
注解验证JSR-303(Java Specification Requests),在实体上增加如下
@NotNull
@Future,Past,将来,过去的日期
@DateTimeFormat日期格式化转换
@DecimalMin最小值,max最大值
@Range(min,max)限定范围
@Email邮箱验证
@Size字符串长度验证
controlller中使用(@Valid @RequestBody Pojo p,Errors error)验证
如果验证总价格=单价*数量,不能使用JSR-303,可以使用spring自带的验证机制,如下
- 实现接口Validate,实现其两个方法,并在controller中使用@InitBinder将实现的接口绑定给WebDataBinder
springMVC数据模型
- Model是spring数据模型接口
- ModeAndView存在ModeMap属性
- 视图解析器InternalResourceViewResolver
- pdf视图,AbstractPdfView抽象类
文件上传
拦截器HandlerInterceptor,可实现其方法
springboot使用时实现WebMvcConfigurer接口的addInterceptors将其加入进去并添加拦截的请求正则即可
- 多个拦截器的执行规则,责任链模式的规则
preHandle(处理器执行前方法)先注册先执行
postHandle(处理器处理后方法)先注册后执行
afterCompletion(处理器完成后方法)先注册后执行
重定向传递对象
传递RedirectAttributes ra.addFlashAttribute(“User”,User);
获取直接使用User即可。原理,将对象存储到咯session中,获取后再删除
获取请求头的参数,@RequestHeader