<返回更多

Spring MVC 的请求处理机制

2022-11-08  今日头条  刷刷的破壳日记
加入收藏

Spring MVC 的请求处理流程

 

DispatcherServlet

DispatcherServlet继承结构

 

DispatcherServlet对请求的处理流程

大致步骤

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

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

定义映射关系

定义处理⽅法

详细参数

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

 

定义校验

Multipart 上传

 

一些误区/注意点

@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
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>