Springboot请求和响应相关注解及使用场景

在Spring Boot中,请求和响应相关的注解主要用于处理HTTP请求和构建HTTP响应。以下是常用的请求和响应相关注解的详细介绍,包括使用场景和示例。

1. 请求处理注解

@RequestMapping
  • 描述: 用于映射HTTP请求到处理方法上。

  • 使用场景: 可以用于类级别和方法级别,适用于所有HTTP方法(GET, POST, PUT, DELETE等)。

  • 示例 :

    java 复制代码
    @RestController
    @RequestMapping("/api")
    public class MyController {
    
        @RequestMapping(value = "/hello", method = RequestMethod.GET)
        public String sayHello() {
            return "Hello, World!";
        }
    }
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping
  • 描述 : 这些是 @RequestMapping 的快捷形式,用于特定的HTTP方法。

  • 使用场景: 用于简化请求映射。

  • 示例 :

    java 复制代码
    @RestController
    @RequestMapping("/api")
    public class MyController {
    
        @GetMapping("/hello")
        public String sayHello() {
            return "Hello, World!";
        }
    
        @PostMapping("/create")
        public String createItem(@RequestBody Item item) {
            return "Item created";
        }
    }
@RequestParam
  • 描述: 用于将HTTP请求参数绑定到方法参数上。

  • 使用场景: 处理查询参数。

  • 示例 :

    java 复制代码
    @GetMapping("/greet")
    public String greet(@RequestParam(name = "name", defaultValue = "World") String name) {
        return "Hello, " + name;
    }
@PathVariable
  • 描述: 用于将URI模板变量绑定到方法参数上。

  • 使用场景: 处理路径参数。

  • 示例 :

    java 复制代码
    @GetMapping("/items/{id}")
    public Item getItem(@PathVariable("id") Long id) {
        // Logic to fetch item by id
        return item;
    }
@RequestBody
  • 描述: 用于将HTTP请求体绑定到方法参数上,并使用HttpMessageConverter进行反序列化。

  • 使用场景: 处理请求体中的JSON或XML数据。

  • 示例 :

    java 复制代码
    @PostMapping("/items")
    public Item createItem(@RequestBody Item item) {
        // Logic to create item
        return item;
    }
@RequestHeader
  • 描述: 将HTTP请求头中的某个值绑定到方法参数上。

  • 使用场景: 读取特定请求头信息。

  • 示例 :

    java 复制代码
    @GetMapping("/user-agent")
    public String getUserAgent(@RequestHeader("User-Agent") String userAgent) {
        return "User-Agent: " + userAgent;
    }

2. 响应处理注解

@ResponseBody
  • 描述: 将方法返回值绑定到HTTP响应体上,并使用HttpMessageConverter进行序列化。

  • 使用场景: 直接返回JSON或XML格式的数据。

  • 示例 :

    java 复制代码
    @GetMapping("/items/{id}")
    @ResponseBody
    public Item getItem(@PathVariable("id") Long id) {
        // Logic to fetch item by id
        return item;
    }
@RestController
  • 描述: 组合注解,相当于@Controller和@ResponseBody的结合,所有方法默认返回JSON或XML格式的数据。

  • 使用场景: 用于标记RESTful控制器。

  • 示例 :

    java 复制代码
    @RestController
    @RequestMapping("/api")
    public class MyController {
    
        @GetMapping("/items/{id}")
        public Item getItem(@PathVariable("id") Long id) {
            return item;
        }
    }
@ResponseStatus
  • 描述: 用于设置HTTP响应状态码。

  • 使用场景: 将特定的状态码返回到客户端。

  • 示例 :

    java 复制代码
    @PostMapping("/items")
    @ResponseStatus(HttpStatus.CREATED)
    public Item createItem(@RequestBody Item item) {
        return item;
    }

3. 异常处理注解

@ExceptionHandler
  • 描述: 用于处理特定的异常,并返回自定义的响应。

  • 使用场景: 处理控制器中的异常。

  • 示例 :

    java 复制代码
    @RestController
    @RequestMapping("/api")
    public class MyController {
    
        @GetMapping("/items/{id}")
        public Item getItem(@PathVariable("id") Long id) {
            if (id == null) {
                throw new ItemNotFoundException("Item not found");
            }
            return item;
        }
    
        @ExceptionHandler(ItemNotFoundException.class)
        @ResponseStatus(HttpStatus.NOT_FOUND)
        public String handleItemNotFoundException(ItemNotFoundException ex) {
            return ex.getMessage();
        }
    }

4. CORS支持

@CrossOrigin
  • 描述: 用于启用跨域资源共享(CORS)。

  • 使用场景: 允许跨域请求。

  • 示例 :

    java 复制代码
    @RestController
    @RequestMapping("/api")
    @CrossOrigin(origins = "http://example.com")
    public class MyController {
    
        @GetMapping("/items/{id}")
        public Item getItem(@PathVariable("id") Long id) {
            return item;
        }
    }

5. 其他相关注解

@RequestAttribute
  • 描述: 将请求范围内的属性绑定到方法参数上。

  • 使用场景: 处理在请求处理过程中设置的属性。

  • 示例 :

    java 复制代码
    @GetMapping("/attributes")
    public String getAttribute(@RequestAttribute("myAttribute") String myAttribute) {
        return "Attribute: " + myAttribute;
    }
@Valid
  • 描述: 用于验证请求体中的对象。

  • 使用场景: 对输入数据进行验证。

  • 示例 :

    java 复制代码
    @PostMapping("/items")
    public Item createItem(@Valid @RequestBody Item item) {
        return item;
    }

这些注解为Spring Boot提供了强大的请求和响应处理能力,帮助开发者轻松创建RESTful风格的API。通过合理使用这些注解,可以使代码更加清晰和易于维护。

相关推荐
涡能增压发动积21 小时前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
云烟成雨TD21 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
Wenweno0o21 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
于慨21 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg32132121 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
tyung21 小时前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald21 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
@yanyu66621 小时前
07-引入element布局及spring boot完善后端
javascript·vue.js·spring boot
殷紫川21 小时前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月1 天前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得