提个问题:前面我们发现,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对象
所以,如果没有以上的配置,我们想将前端的请求参数转换为对象,则会以失败告终。
HttpMessageConverter是个接口,其实现类有很多,主要是一个JSON的转换实现类
当我们给控制器添加@ResponseBody时,SpringMVC会将这个响应转换为JSON类型。
而背后就是采用了MappingJackson2HttpMessageConverter进行转换处理。
閱讀更多 互聯網十年老兵 的文章