Spring Boot 中 controller层注解

总结:@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 方法更具灵活性。合理使用它们并了解何时可以省略,能够让代码更加简洁、易于维护。

相关推荐
小江的记录本1 分钟前
【JVM虚拟机】JVM调优:常用JVM参数、调优核心指标、OOM排查、GC日志分析、Arthas工具使用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
程序员cxuan13 分钟前
我花了两天时间,终于把 Codex 额度掉太快的问题整明白了!!
人工智能·后端·程序员
IT_陈寒14 分钟前
Vue这个动态响应坑把我整不会了
前端·人工智能·后端
金銀銅鐵14 分钟前
[Java] 用图形化界面演示 iadd, isub, iconst_<i> 指令的效果
java·后端·python
AskHarries27 分钟前
做国内还是出海
后端
J2虾虾32 分钟前
Spring AI Alibaba文档
java·人工智能·spring
YikNjy38 分钟前
break和continue
java·开发语言·算法
SomeOtherTime39 分钟前
Geojson相关(AI回答)
java·前端·python
日月云棠1 小时前
10 Integer —— 最常用的整数包装类深度解析
java·后端
大鸡腿同学1 小时前
大模型为何总 “胡说八道”?做完 RAG 知识库,我看懂了它的底层逻辑
后端