SpringMVC Restful 风格的接口的流程是什么样的呢?
SpringMVC Restful 风格的接口的流程是什么样的呢?
我们都知道 Restful 接口,响应格式是 json,这就用到了一个常用注解:@ResponseBody
@GetMapping("/user")
@ResponseBody
public User user(){
return new User(1,"张三");
}
加入了这个注解后,整体的流程上和使用 ModelAndView 大体上相同,但在细节上有一些不同:
- 客户端向服务端发送一次请求,该请求首先到达前端控制器 DispatcherServlet。
- DispatcherServlet 接收到请求后,调用 HandlerMapping 处理器映射器,确定该请求应由哪个 Controller 来处理。
- DispatcherServlet 调用 HandlerAdapter 处理器适配器,告知适配器要执行哪个 Controller。
- Controller 被封装为 ServletInvocableHandlerMethod,HandlerAdapter 执行 invokeAndHandle 方法,完成对 Controller 的请求处理。
- HandlerAdapter 处理完 Controller 的请求后,调用 HandlerMethodReturnValueHandler 来处理返回值,主要过程如下:
5.1. 使用 RequestResponseBodyMethodProcessor 创建 ServletServerHttpResponse(对原生 ServerHttpResponse 的封装)实例。
5.2. 使用 HttpMessageConverter 的 write 方法,将返回值写入 ServletServerHttpResponse 的 OutputStream 输出流中。
5.3. 在写入过程中,使用 JsonGenerator(默认使用 Jackson 框架)对返回值进行 Json 序列化。
- 请求处理完成后,返回的 ModelAndView 为 null,并且 ServletServerHttpResponse 中已经写入了响应,因此不需要关注 View 的处理。