SpringMVC 执行流程
前言:
在前后端分离的情况下,SpringMVC 的执行流程主要集中在处理 RESTful 请求和返回 JSON 数据。这里的 Controller 会直接返回数据,而不是视图。我们通常会使用 @RestController
和 @RequestMapping
来处理请求,@ResponseBody
会让返回的数据自动转换成 JSON 格式。下面是简化后的流程:
一、SpringMVC 执行流程概述
- 请求到达 DispatcherServlet:客户端发起请求,由
DispatcherServlet
拦截并处理。 - 请求映射(Handler Mapping):
DispatcherServlet
根据请求 URL 和 HTTP 方法查找对应的处理方法。 - 调用 Controller 方法:
DispatcherServlet
将请求交给对应的 Controller 方法处理,通常是业务逻辑处理。 - 返回 JSON 数据:Controller 处理完请求后,将结果以 JSON 格式返回,通常不使用
ModelAndView
。 - 响应返回客户端:SpringMVC 会将 Controller 返回的 JSON 数据作为 HTTP 响应发送到客户端。
二、详细解析 SpringMVC 执行流程
1. 请求到达 DispatcherServlet
在前后端分离的架构中,请求还是由 DispatcherServlet
进行拦截和处理。不同的是,DispatcherServlet
会选择合适的 HandlerMapping
来找到对应的 RESTful 控制器。
2. 请求映射(Handler Mapping)
SpringMVC 中的 HandlerMapping
会根据 URL 和 HTTP 方法(如 GET、POST)来找到对应的 Controller 方法。
例如,使用 @RestController
和 @RequestMapping
注解时:
@RestController
public class UserController {@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)public User getUser(@PathVariable("id") Long id) {return userService.findUserById(id); // 返回一个 User 对象}
}
在这个例子中,当客户端发送一个 GET 请求到 /user/{id}
时,DispatcherServlet
会找到 getUser
方法来处理该请求。
3. 调用 Controller 方法
Controller 方法接收到请求后,通常会执行业务逻辑,处理请求参数,并返回一个对象(通常是 POJO 或 DTO)。这个对象会自动转换成 JSON 格式并作为 HTTP 响应返回给客户端。
如果 Controller 方法返回一个对象,Spring 会通过 Jackson
或其他 JSON 处理库自动将该对象转化为 JSON 格式。
4. 返回 JSON 数据
在前后端分离的架构中,@RestController
使得 Controller 的返回值自动转换为 JSON 格式。你不需要手动创建 ModelAndView
对象,只需要返回业务逻辑处理后的对象,Spring 会自动将它转换成 JSON 响应。
例如:
@RestController
public class UserController {@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)public User getUser(@PathVariable("id") Long id) {User user = userService.findUserById(id);return user; // 直接返回一个 POJO 对象,Spring 会自动转换为 JSON}
}
这里,User
对象会被自动转换成 JSON 格式,如:
{"id": 1,"name": "John Doe","age": 30
}
5. 响应返回客户端
SpringMVC 会将 Controller 返回的 JSON 数据作为 HTTP 响应的内容,发送给客户端,通常是前端应用(如 React、Vue.js)或移动应用(如 Android、iOS)进行处理和展示。
客户端接收到 JSON 数据后,可以通过 JavaScript 或其他技术解析数据并展示给用户。
三、简化的前后端分离流程
客户端请求 --> DispatcherServlet--> Handler Mapping --> Controller--> 执行业务逻辑 --> 返回 POJO 对象--> Spring 自动将 POJO 转换为 JSON--> 响应返回客户端
总结
在前后端分离的架构中,SpringMVC 的执行流程简化了很多,关键的变化是:
- 不再需要
ModelAndView
:Controller 直接返回对象,Spring 自动将其转换为 JSON 格式。 - 无视图解析:因为不再涉及 JSP 或其他视图技术,Spring 不需要渲染视图。
- 数据返回:主要关注数据的处理和返回,响应体中通常是 JSON 数据。