008-SpringMVC-HandlerAdapter适配

提个问题:前面我们发现,SpringMVC非常轻松就可以获取到前端传递各种参数,这背后是怎么做到的?


这里面关键就是SpringMVC的消息转换机制,核心要点就是我们之前画的流程图中的HandlerAdapter

具体的结构图大家可以参考

处理器的作用就是在控制器的基础上加上一层处理,主要是在Http请求到达控制器之前对各类消息进行处理。

步骤如下:

1,Http请求到达DispatcherServlet

2,DispatcherServlet-->HandlerMapping-->HandlerAdapter(执行处理器)

3,HandlerAdpater获取Http的请求信息,然后将Http的请求信息转换为控制器的各种不同类型参数,这样我们的控制器就可以获取到对应参数了。

4,具体是怎么转换的?其实还要经历以下步骤

4.1 先通过Http的消息转换器(HttpMessageConverter)对消息进行转换,简单转换为java类型,比如String类型;

4.2 如果想进一步转换为对象或其他类型,则需要借助后续的转换器和格式化器

所以,这个时候来解释下的作用了

(也可以通过注解@EnableWebMvc的方式来配置)

当加入这项配置后,SpringIOC容器会自动定义一个关于转换器和格式化器的类实例

FormattingConversionServiceFactoryBean,这个工厂最主要的产品就是DefaultFormattingConversionService对象

008-SpringMVC-HandlerAdapter适配

008-SpringMVC-HandlerAdapter适配

所以,如果没有以上的配置,我们想将前端的请求参数转换为对象,则会以失败告终。

HttpMessageConverter是个接口,其实现类有很多,主要是一个JSON的转换实现类

008-SpringMVC-HandlerAdapter适配

当我们给控制器添加@ResponseBody时,SpringMVC会将这个响应转换为JSON类型。

而背后就是采用了MappingJackson2HttpMessageConverter进行转换处理。

008-SpringMVC-HandlerAdapter适配


分享到:


相關文章: