总结:@RestController 中的常用方法注解及其省略情况
在 Spring Boot 中,@RestController 是一个用于处理 RESTful 风格请求的组合注解,它结合了 @Controller 和 @ResponseBody,使得返回的对象直接转换成 JSON 或 XML 格式,无需视图解析。它常用于 API 接口,尤其是处理 HTTP 请求时常用的方法注解如下:
1. @GetMapping
-
作用:处理 HTTP GET 请求,通常用于获取资源。
-
示例:
@GetMapping("/greet") public String greet() { return "Hello, World!"; } -
省略情况:
-
可以省略
@RequestParam:如果请求参数的名称与方法参数名称一致,@RequestParam可以省略。 -
如果没有查询参数,也可以省略
@RequestParam注解。
-
2. @PostMapping
-
作用:处理 HTTP POST 请求,通常用于创建资源。
-
示例:
@PostMapping("/createUser") public String createUser(@RequestBody User user) { return "User created: " + user.getName(); } -
省略情况:
@RequestBody不能省略 :在处理 POST 请求时,@RequestBody用于将请求体数据映射到 Java 对象。
3. @PutMapping
-
作用:处理 HTTP PUT 请求,通常用于更新资源。
-
示例:
@PutMapping("/updateUser/{id}") public String updateUser(@PathVariable Long id, @RequestBody User user) { return "User with id " + id + " updated to: " + user.getName(); } -
省略情况:
@PathVariable和@RequestBody不能省略,除非你不需要从 URL 或请求体获取参数。
4. @DeleteMapping
-
作用:处理 HTTP DELETE 请求,通常用于删除资源。
-
示例:
@DeleteMapping("/deleteUser/{id}") public String deleteUser(@PathVariable Long id) { return "User with id " + id + " deleted"; } -
省略情况:
@PathVariable不能省略,如果 URL 路径中有动态参数。
5. @PatchMapping
-
作用:处理 HTTP PATCH 请求,通常用于部分更新资源。
-
示例:
@PatchMapping("/updateUser/{id}") public String patchUser(@PathVariable Long id, @RequestBody User user) { return "User with id " + id + " partially updated to: " + user.getName(); } -
省略情况:
@PathVariable和@RequestBody不能省略,除非请求中没有对应的路径或请求体。
6. @RequestMapping
-
作用 :通用注解,用于处理所有 HTTP 请求类型(如 GET、POST、PUT、DELETE 等),可以指定
method属性限制特定的 HTTP 方法。 -
示例:
@RequestMapping(value = "/greet", method = RequestMethod.GET) public String greet() { return "Hello, World!"; } -
省略情况:
- 使用更具体的注解(如
@GetMapping、@PostMapping等)时,@RequestMapping可以省略。
- 使用更具体的注解(如
7. @RequestParam
-
作用:获取 HTTP 请求中的查询参数。
-
示例:
@GetMapping("/greet") public String greet(@RequestParam String name) { return "Hello, " + name; } -
省略情况:
- 可以省略:如果查询参数的名称与方法参数名称一致,Spring 会自动绑定查询参数到方法参数。
8. @PathVariable
-
作用:从 URL 路径中获取动态参数。
-
示例:
@GetMapping("/greet/{name}") public String greet(@PathVariable String name) { return "Hello, " + name; } -
省略情况:
- 可以省略:如果方法参数的名称与 URL 路径变量名称一致,Spring 自动绑定。
9. @RequestBody
-
作用:将 HTTP 请求体中的数据映射为 Java 对象。
-
示例:
@PostMapping("/createUser") public String createUser(@RequestBody User user) { return "User created: " + user.getName(); } -
省略情况:
- 不能省略,如果方法需要从请求体中获取数据。
10. @ResponseBody
-
作用:指示 Spring 将方法的返回值直接写入 HTTP 响应体,而不是进行视图解析。
-
示例:
@RestController public class MyController { @GetMapping("/greet") @ResponseBody public String greet() { return "Hello, World!"; } } -
省略情况:
- 可以省略 :在
@RestController中,@ResponseBody已隐式包含,不需要显式使用。
- 可以省略 :在
11. @Valid 和 @Validated
-
作用 :用于验证请求体中的数据,通常与
@RequestBody配合使用。 -
示例:
@PostMapping("/createUser") public String createUser(@RequestBody @Valid User user) { return "User created: " + user.getName(); } -
省略情况:
- 可以省略 :如果不需要对请求体进行验证,
@Valid或@Validated可以省略。
- 可以省略 :如果不需要对请求体进行验证,
12. @ModelAttribute
-
作用:将 HTTP 请求中的参数绑定到 Java 对象。常用于表单提交或 GET 请求的查询参数。
-
示例:
@PostMapping("/createUser") public String createUser(@ModelAttribute User user) { return "User created: " + user.getName(); } -
省略情况:
- 可以省略 :如果你直接使用
@RequestParam或@RequestBody来处理参数绑定。
- 可以省略 :如果你直接使用
小结:每种注解的省略情况
| 注解 | 省略情况 |
|---|---|
@GetMapping |
查询参数与方法参数名称一致时,@RequestParam 可以省略。 |
@PostMapping |
不能省略 @RequestBody,除非不需要请求体数据。 |
@PutMapping |
不能省略 @PathVariable 和 @RequestBody。 |
@DeleteMapping |
不能省略 @PathVariable。 |
@PatchMapping |
不能省略 @PathVariable 和 @RequestBody。 |
@RequestMapping |
使用更具体的注解(如 @GetMapping 等)时可以省略。 |
@RequestParam |
方法参数名称与查询参数名称一致时,可以省略。 |
@PathVariable |
方法参数名称与路径变量名称一致时,可以省略。 |
@RequestBody |
不能省略,用于绑定请求体中的数据。 |
@ResponseBody |
在 @RestController 中可以省略。 |
@Valid / @Validated |
不进行验证时可以省略。 |
@ModelAttribute |
可以省略,如果使用 @RequestParam 或 @RequestBody。 |
结论:
这些注解让 Spring Boot 中的 API 方法更具灵活性。合理使用它们并了解何时可以省略,能够让代码更加简洁、易于维护。