深入浅出spring boot 2.x 04-springMVC注解【笔记】

本文深入探讨SpringMVC的工作流程,包括处理器映射、参数转换与验证、数据模型及视图解析等关键环节。同时,解析SpringBoot如何自动化配置参数转换规则,以及在数据验证方面的独特机制。
springMVC启动映射
  1. 启动时将@RequestMapping配置内容保存到处理器映射HandlerMapping中
  2. 通过拦截请求与HandlerMapping匹配,找到对应处理器
  3. 将处理器和拦截器保存到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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值