SpringMVC Restful 风格的接口的流程是什么样的呢?

我们都知道 Restful 接口,响应格式是 json,这就用到了一个常用注解:@ResponseBody

    @GetMapping("/user")
    @ResponseBody
    public User user(){
        return new User(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(对原生 ServerHttpResponse 的封装)实例。

5.2. 使用 HttpMessageConverter 的 write 方法,将返回值写入 ServletServerHttpResponse 的 OutputStream 输出流中。

5.3. 在写入过程中,使用 JsonGenerator(默认使用 Jackson 框架)对返回值进行 Json 序列化。

  1. 请求处理完成后,返回的 ModelAndView 为 null,并且 ServletServerHttpResponse 中已经写入了响应,因此不需要关注 View 的处理。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题