1、报文传输过程:
HTTP报文来到前端适配器(DispatcherServlet)后,根据HandlerMapping找到对应的Handler(Controller)。之后将handler交于handlerAdapter处理,handlerAdapter根据HTTP报文选择handler中对应方法执行,执行完毕返回值交回前端适配器。
2、JSON与对象之间转换:
在1中,在HTTP报文执行处理方法前,需要经过转换器将报文数据进行转换。如果启动了JSON转换器且请求报文内容为json,则经过json转换。如果启动了xml转换器且请求报文内容为xml,则经过xml转换。若无转换器与报文内容匹配则出现异常。
若使用了@RestController响应,则返回对象将经过SpringBoot自带的HttpMessageConverter将对象转换为json并设置ContentType响应给请求端,使用的是SpringBoot自带的jackson转换器。
若在SpringBoot中导入以下的依赖,SpringBoot将自动导入其中的json转换器与xml转换器,优先级高于原jackson转换器,使得后者失效(源码中对同类转换器由高到低遍历,只执行第一个转换器)。依赖包如下:
<!--json依赖包-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!--xml依赖包-->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
3、Filter与Interceptor区别
- Filter是在web容器中进行,在Interceptor前处理
- Interceptor是在Spring容器中进行,在Filter后处理
- Filter可对程序之后处理的所有request与response对象进行替换与包装,而Interceptor不行。