SpringMVC
SpringMVC
池慕睡不着SpringMVC Restful风格的接口的流程是什么样的呢?
PS:这是一道全新的八股,毕竟ModelAndView这种方式应该没人用了吧?现在都是前后端分离接口,八股也该更新换代了。
我们都知道Restful接口,响应格式是json,这就用到了一个常用注解:
@ResponseBody
1 |
|
加入了这个注解后,整体的流程上和使用ModelAndView大体上相同,但是细节上有一些不同:
1. 客户端向服务端发送一次请求,这个请求会先到前端控制器DispatcherServlet
2. DispatcherServlet接收到请求后会调用HandlerMapping处理器映射器。由此得知,该请求该由哪个Controller来处理
3. DispatcherServlet调用HandlerAdapter处理器适配器,告诉处理器适配器应该要去执行哪个Controller
4. Controller被封装成了ServletInvocableHandlerMethod,HandlerAdapter处理器适配器去执行invokeAndHandle方法,完成对Controller的请求处理
5. HandlerAdapter 用执行完对Controller的请求,会调用
HandlerMethodReturnValueHandler去处理返回值,主要的过程:
5.1. 调用RequestResponseBodyMethodProcessor,创建
ServletServerHttpResponse(Spring对原生ServerHttpResponse的封装)实例
5.2.使用HttpMessageConverter的write方法,将返回值写入
ServletServerHttpResponse的OutputStream输出流中
5.3.在写入的过程中,会使用JsonGenerator(默认使用Jackson框架)对返回值进行Json序列化
6. 执行完请求后,返回的ModelAndView为null,ServletServerHttpResponse里也已 经写入了响应,所以不用关心View的处理