Spring MVC 是 Spring 框架中的一个模块,专注于简化 Web 应用的开发。通过一系列注解,Spring MVC 提供了灵活的请求处理机制,使得控制器代码更加简洁易懂。在本文中,我们将详细介绍常用的 Spring MVC 注解,并提供代码示例,帮助你更好地理解和使用这些注解。
1. @Controller - 标记控制器类
@Controller
用于标记一个类是 Spring MVC 的控制器(Controller),该类中的方法可以处理 HTTP 请求。Spring 容器会自动检测标注了 @Controller
的类,并将其作为 Spring MVC 的组件。
示例:
@Controller
public class HomeController {
@RequestMapping("/home")
public String home() {
return "home"; // 返回视图名为 "home"
}
}
2. @RequestMapping - 请求映射
@RequestMapping
用于定义 URL 与控制器方法之间的映射。它可以注解在类和方法上,用来指定请求的路径、HTTP 方法等。
属性:
- value:定义 URL 路径。
- method:指定请求方法(如 GET、POST)。
- params:指定请求参数,限制匹配的请求。
- headers:定义请求头信息。
示例:
@Controller
@RequestMapping("/api")
public class UserController {
@RequestMapping(value = "/users", method = RequestMethod.GET)
public String getUsers() {
return "userList"; // 返回视图名
}
@RequestMapping(value = "/users", method = RequestMethod.POST)
public String addUser() {
return "userForm"; // 返回视图名
}
}
3. @GetMapping、@PostMapping、@PutMapping、@DeleteMapping - 请求方法简化注解
这些注解是 @RequestMapping
的简化形式,用于指定特定的 HTTP 方法请求,代码更加简洁。
示例:
@Controller
@RequestMapping("/products")
public class ProductController {
@GetMapping("/{id}")
public String getProduct(@PathVariable("id") String id) {
return "productDetail";
}
@PostMapping
public String createProduct() {
return "productForm";
}
@PutMapping("/{id}")
public String updateProduct(@PathVariable("id") String id) {
return "productForm";
}
@DeleteMapping("/{id}")
public String deleteProduct(@PathVariable("id") String id) {
return "productList";
}
}
4. @PathVariable - 获取路径变量
@PathVariable
用于绑定 URL 中的路径变量到方法参数。路径变量在 RESTful 风格的 URL 中经常用到,例如 /user/1
中的 1
是用户ID。
示例:
@GetMapping("/user/{userId}")
public String getUser(@PathVariable("userId") String userId) {
System.out.println("User ID: " + userId);
return "userDetail";
}
5. @RequestParam - 获取请求参数
@RequestParam
用于绑定 URL 中的查询参数到方法参数,例如 /search?keyword=spring
。
示例:
@GetMapping("/search")
public String search(@RequestParam("keyword") String keyword) {
System.out.println("Keyword: " + keyword);
return "searchResults";
}
6. @RequestBody - 解析请求体数据
@RequestBody
将请求体中的 JSON 数据绑定到方法参数对象中。常用于接收 POST 请求中的 JSON 数据。
示例:
@PostMapping("/user")
public String createUser(@RequestBody User user) {
System.out.println("User Name: " + user.getName());
return "userDetail";
}
7. @ResponseBody - 返回 JSON 数据
@ResponseBody
用于将方法的返回值直接作为 HTTP 响应体返回,常用于返回 JSON 数据。可以配合 @RestController
使用。
示例:
@ResponseBody
@GetMapping("/api/user/{id}")
public User getUserJson(@PathVariable("id") String id) {
User user = new User();
user.setId(id);
user.setName("John Doe");
return user;
}
8. @RestController - 简化 @Controller
和 @ResponseBody
@RestController
是 @Controller
和 @ResponseBody
的组合注解,适用于需要直接返回 JSON 或其他对象的控制器类。
示例:
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/user/{id}")
public User getUser(@PathVariable("id") String id) {
User user = new User();
user.setId(id);
user.setName("John Doe");
return user;
}
}
9. @ModelAttribute - 绑定模型数据
@ModelAttribute
可以用于方法参数和方法上。参数上使用时,可以绑定表单数据到对象中;方法上使用时,可以在每个请求之前执行,用来预先准备模型数据。
示例:
@ModelAttribute("user")
public User createUser() {
return new User(); // 创建一个空的用户对象
}
@PostMapping("/user")
public String saveUser(@ModelAttribute("user") User user) {
System.out.println("User Name: " + user.getName());
return "userDetail";
}
10. @SessionAttributes - 存储模型数据到 Session
@SessionAttributes
用于将某些模型数据存储到 Session 中,常用于需要跨请求保存数据的场景。
示例:
@Controller
@SessionAttributes("user")
public class UserController {
@ModelAttribute("user")
public User createUser() {
return new User();
}
@PostMapping("/user")
public String saveUser(@ModelAttribute("user") User user) {
return "userDetail";
}
}
11. @ExceptionHandler - 异常处理
@ExceptionHandler
用于定义方法来处理控制器中的异常,可以根据异常类型来选择不同的方法处理。
示例:
@Controller
public class ErrorController {
@ExceptionHandler(Exception.class)
public String handleException(Exception e) {
System.out.println("Exception: " + e.getMessage());
return "error";
}
}
总结
本文介绍了 Spring MVC 中的核心注解,了解这些注解可以帮助我们更高效地构建 Web 应用。通过结合这些注解的使用,你可以更加灵活地处理请求、解析数据、处理异常。希望这篇博客能够帮助你更好地理解 Spring MVC 的注解机制!