您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

Spring MVC 的请求处理机制

时间:2022-11-08 13:51:09  来源:今日头条  作者:刷刷的破壳日记

Spring MVC 的请求处理流程

 

DispatcherServlet

DispatcherServlet继承结构

 

DispatcherServlet对请求的处理流程

大致步骤

  • 绑定⼀些 Attribute
    • WebApplicationContext / LocaleResolver / ThemeResolver
  • 处理 Multipart
    • 如果是,则将请求转为 MultipartHttpServletRequest
  • Handler 处理
    • 如果找到对应 Handler,执⾏ Controller 及前后置处理器逻辑
  • 处理返回的 Model ,呈现(render)视图

具体可以参见DispatcherServlet#doService(...)和DispatcherServlet#doDispatch(...)方法

如何定义处理⽅法(即Handler方法)

定义映射关系

  • @Controller
  • @RequestMapping
    • value: 指定请求的实际地址, 比如 /action/info之类
    • method: 指定请求的method类型, GET、POST、PUT、DELETE等
    • consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
    • produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
    • params: 指定request中必须包含某些参数值是,才让该方法处理
    • headers: 指定request中必须包含/不包含某些指定的header值,才能让该方法处理请求
  • @RestController
  • @GetMapping / @PostMapping / @PutMapping / @DeleteMapping / @PatchMapping

定义处理⽅法

  • @RequestBody / @ResponseBody / @ResponseStatus(用于改变HTTP响应的状态码)
  • @PathVariable / @RequestParam / @RequestHeader
    • 通过@PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“)
    • @RequestParam标注在接口的方法参数上,被标注的参数的值来源于request.getParameter或request.getParameterValues
    • @RequestHeader注解,能够将请求头中的变量值映射到控制器的参数中。
  • HttpEntity / RequestEntity / ResponseEntity
    • HttpEntity表示http的request和resposne实体,它由消息头和消息体组成。从HttpEntity中可以获取http请求头和回应头,也可以获取http请求体和回应体信息。HttpEntity的典型应用是配合RestTemplate。

详细参数

https://docs.spring.io/spring-framework/docs/5.1.5.RELEASE/spring-framework-reference/web.html#mvc-ann-arguments

详细返回

https://docs.spring.io/spring-framework/docs/5.1.5.RELEASE/spring-framework-reference/web.html#mvc-ann-return-types

⽅法示例

 

定义类型转换

SpringBoot的默认实现

在WebMvcAutoConfiguration的内部类
WebMvcAutoConfigurationAdapter中实现了重写WebMvcConfigurer接口这样一个方法。

addFormatters方法用于添加默认的{@link Converter Converter}和{@link Formatter Formatters}到注册中心。

 


ApplicationConversionService#addBeans(...)方法

 

Converter和Formatter的异同

两者的作用一样,都是类型转换。


org.springframework.format.Formatter只能做String类型到其他类型的转换。


org.springframework.core.convert.converter.Converter可以做任意类型的转换。

⾃⼰实现 WebMvcConfigurer

  • 添加⾃定义的 Converter
  • 添加⾃定义的 Formatter

 

定义校验

  • 通过 Validator 对绑定结果进⾏校验
    • Hibernate Validator
  • @Valid、@Validated注解 及自定义注解校验
  • BindingResult (对于不希望Spring MVC来介入我的Valid失败后的操作,可以通过BindingResult实现)

Multipart 上传

  • 配置 MultipartResolver
    • Spring Boot ⾃动配置 MultipartAutoConfiguration
  • ⽀持类型 multipart/form-data
  • MultipartFile 类型

 

一些误区/注意点

@RequestParam注解能读取请求体里的内容吗?

@RequestParam:In Spring MVC, "request parameters" map to query parameters, form data, and parts in multipart requests.

有时候我们只想取出请求body里面的部分内容,但@RequstBody注解是把整个请求的Body传给参数,而RequestParam是可以把Body里的对应部分取出来传给参数。

controller里面可以实现传多个对象么? 比如:hello(Student student, Teacher teacher)

注意:@RequestBody只能将一个请求报文体转成一个复杂对象。

  1. 将多个对象合成一个中间复杂对象,之后再拆开。
  2. 通过 Map 或者Jackson 的 ObjectNode
  3. 自定义注解,并将它注册到 Spring MVC


Tags:Spring MVC   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Spring MVC 的请求处理流程 DispatcherServletDispatcherServlet继承结构 DispatcherServlet对请求的处理流程大致步骤 绑定⼀些 Attribute WebApplicationContext / Loc...【详细内容】
2022-11-08  Tags: Spring MVC  点击:(11)  评论:(0)  加入收藏
1.针对url传参或form表单传参@InitBinderpublic void initBinder(final WebDataBinder webdataBinder) { //去除首尾空格 webdataBinder.registerCustomEditor(String...【详细内容】
2022-06-24  Tags: Spring MVC  点击:(136)  评论:(0)  加入收藏
今天我给大家介绍一下Spring MVC的详细执行流程。我把Spring MVC的执行流程划分为三个阶段,配置阶段、初始化阶段和运行阶段。 我整理了一张完整的执行流程图,需要高清图的小...【详细内容】
2022-04-20  Tags: Spring MVC  点击:(180)  评论:(0)  加入收藏
想要了解Spring MVC框架的原理,探究框架是如何设计的,不错的学习方式是阅读源码,然后自己手写一个框架。本文带领大家简化的手写一个Spring MVC框架。Spring框架对于Java后端程...【详细内容】
2021-09-22  Tags: Spring MVC  点击:(124)  评论:(0)  加入收藏
现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了...【详细内容】
2021-05-27  Tags: Spring MVC  点击:(283)  评论:(0)  加入收藏
在使用Spring MVC的时候,标准的配置是如下这样的: 注意注意:小编整理了一份Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC,有需要的朋友可以私信“spring”免费...【详细内容】
2021-04-13  Tags: Spring MVC  点击:(293)  评论:(0)  加入收藏
DispatcherServlet作为Spring MVC的核心控制器,初始化组件,处理客户端发送的请求,并返回 ModelAndView,进行视图渲染。主要是实现了父类 FrameworkServlet的抽象方法 doService()。...【详细内容】
2020-10-10  Tags: Spring MVC  点击:(132)  评论:(0)  加入收藏
前言Spring MVC是很多团队使用的Web框架。在基于Spring MVC的项目里,注解的使用几乎遍布在项目中的各个模块,有Java提供的注解,如:@Override、@Deprecated等;也有Spring提供的注...【详细内容】
2020-05-24  Tags: Spring MVC  点击:(140)  评论:(0)  加入收藏
通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求。然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序...【详细内容】
2020-03-11  Tags: Spring MVC  点击:(118)  评论:(0)  加入收藏
在本例中,我们将使用Spring MVC框架构建一个入门级web应用程序。Spring MVC 是Spring框架最重要的的模块之一。它以强大的Spring IoC容器为基础,并充分利用容器的特性来简化...【详细内容】
2019-08-07  Tags: Spring MVC  点击:(432)  评论:(0)  加入收藏
▌简易百科推荐
这里首先需要说明的就是为什么要进行配置文件加密。在当今这个移动互联网横行的时代里,无论是企业的隐私还是个人的隐私都是需要得到保护的。所以我们在实际的操作中会采用...【详细内容】
2022-11-14  架构师面试宝典  今日头条  Tags:Spring Boot   点击:(5)  评论:(0)  加入收藏
深度自定义mybatis回顾mybatis的操作的核心步骤 编写核心类SqlSessionFacotryBuild进行解析配置文件 深度分析解析SqlSessionFacotryBuild干的核心工作 编写核心类SqlSessio...【详细内容】
2022-11-13    网易号  Tags:mybatis   点击:(2)  评论:(0)  加入收藏
WebRTC(Web Real-Time Communication)是为了让开发者在浏览器实现多媒体交换的技术,于2011年被加入W3C规范。当前的支持情况可以见下图。 WebRTC的核心在于建立PeerConnection...【详细内容】
2022-11-11  效能IT哥  今日头条  Tags:WEBRtc   点击:(9)  评论:(0)  加入收藏
由于hystrix官方已经停止维护了,目前spring-cloud推荐使用resilience4j来代替hystrix实现熔断、限流。熔断一般指客户端调用服务端接口出现异常时客户端侧的处理,当然也可以是...【详细内容】
2022-11-10  vivi2020一  今日头条  Tags:spring   点击:(18)  评论:(0)  加入收藏
Spring MVC 的请求处理流程 DispatcherServletDispatcherServlet继承结构 DispatcherServlet对请求的处理流程大致步骤 绑定⼀些 Attribute WebApplicationContext / Loc...【详细内容】
2022-11-08  刷刷的破壳日记  今日头条  Tags:Spring MVC   点击:(11)  评论:(0)  加入收藏
前几天发布了一篇java压缩文件的文章,今天有朋友跟我说,这压缩没啥技术含量啊,你再弄个压缩完然后返回前端下载的功能呗。其实吧我觉得下载功能比压缩更简单吧,压缩的递归我至少...【详细内容】
2022-11-07  天子小门生    Tags:SpringBoot   点击:(25)  评论:(0)  加入收藏
mybaties核心组件概念Configuration:用于描述 Mybatis 主配置文件信息,MyBatis 框架在启动时自动配置类中,会加载mapper配置文件,将配置信息转换为 Configuration 对象,然后把该...【详细内容】
2022-11-07  奋斗的架构师  今日头条  Tags:springboot   点击:(11)  评论:(0)  加入收藏
问题描述最近项目中遇到一个问题,在某一个时刻应用系统出现了大量的ES访问超时的现象,异常日志主要为:java.io.IOException: Connection reset by peer at org.elasticsearch.c...【详细内容】
2022-11-07  蜗牛学技术  今日头条  Tags:SpringBoot   点击:(26)  评论:(0)  加入收藏
Java智慧小区管理系统源码 智慧物业管理系统源码开源地址:http://www.ydmdd.com/#/index/goods/28e18c96-741b-48e5-9192-af41012992d4使用SpringBoot+Mybatis+BootStrap+Lay...【详细内容】
2022-11-04  淘源码     Tags:SpringBoot   点击:(30)  评论:(0)  加入收藏
这篇文章中我们将会介绍Spring的框架以及本体内容,包括核心容器,注解开发,AOP以及事务等内容那么简单说明一下Spring的必要性: Spring技术是JavaEE开发的必备技能,企业开发技术...【详细内容】
2022-11-03  嘻呱互联   网易号  Tags:Spring   点击:(20)  评论:(0)  加入收藏
站内最新
站内热门
站内头条