Spring MVC 是 Spring 框架的核心模块之一,用于构建灵活、易于测试的 Web 应用程序。
DispatcherServlet:
@Controller:
@RequestMapping:
ModelAndView:
ViewResolver:
案例: 创建一个简单的 MVC 控制器
@Controller
public class MyController {
@GetMapping("/hello")
public ModelAndView hello() {
ModelAndView modelAndView = new ModelAndView("helloTemplate");
modelAndView.addObject("message", "Hello, Spring MVC!");
return modelAndView;
}
}
在这个例子中,@GetMapping("/hello")
注解将 HTTP GET 请求 /hello
映射到 hello
方法。该方法创建了一个 ModelAndView
对象,添加了一条消息到模型中,并指定了视图模板 helloTemplate
。
RESTful API 是一种设计风格,它定义了客户端和服务器交互的约束,使得 API 更加轻量、灵活。
@RestController:
@Controller
类似,但所有响应方法的返回值都直接作为 HTTP 响应体。@RequestMapping:
@RequestMapping
来映射请求到处理方法。method
属性指定支持的 HTTP 方法。案例: 创建一个 RESTful 服务
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = findUserById(id); // 假设这个方法从数据库中获取用户信息
if (user == null) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(user);
}
}
在这个例子中,@RestController
和 @RequestMapping("/api/users")
注解定义了一个 REST 控制器,它处理 /api/users
路径下的请求。@GetMapping("/{id}")
映射 GET 请求到 getUser
方法,该方法根据用户 ID 获取用户信息,并使用 ResponseEntity
来构建响应。
异常处理是 Web 应用程序中不可或缺的一部分,Spring MVC 提供了灵活的异常处理机制。
@ControllerAdvice:
@ExceptionHandler
, @ResponseStatus
等注解来处理异常。@ExceptionHandler:
案例: 全局异常处理
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<?> handleResourceNotFound(Exception ex) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
}
@ExceptionHandler(Exception.class)
public ResponseEntity<?> handleAllExceptions(Exception ex, WebRequest request) {
// 可以记录日志等操作
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An error occurred");
}
}
在这个例子中,@ControllerAdvice
注解标记了一个全局异常处理类,@ExceptionHandler
注解用于捕获并处理特定的异常类型。
数据验证是确保应用程序接收到的数据是有效和符合预期的。
@Valid:
BindingResult:
案例: 数据验证
@PostMapping("/users")
public ResponseEntity<?> createUser(@Valid @RequestBody User user, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
Map<String, String> errors = new HashMap<>();
bindingResult.getAllErrors().forEach(error -> errors.put(error.getObjectName(), error.getDefaultMessage()));
return ResponseEntity.badRequest().body(errors);
}
// 保存用户信息
// ...
return ResponseEntity.ok().build();
}
在这个例子中,@Valid
注解确保了 User
对象在绑定到方法参数之前会被验证。如果存在验证错误,BindingResult
将包含这些错误,然后可以构建一个包含错误信息的响应。
通过这些详细的解释和案例,我们可以看到 Spring MVC 提供了一套全面的机制来支持 Web 应用程序的开发,从基础的 MVC 结构到 RESTful API 设计,再到异常处理和数据验证,都体现了 Spring MVC 的强大和灵活性。