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。通过合理使用这些注解,可以使代码更加清晰和易于维护。

相关推荐
Csvn2 分钟前
📊 SQL 入门 Day 22:视图与物化视图
后端·sql
Csvn5 分钟前
🐍 Day 4: Python 控制流 — 条件、循环与推导式的艺术
后端·python
2601_9537208243 分钟前
【计算机毕业设计】基于Vue与Spring Boot的高校兼职信息服务平台设计与实现
spring boot·后端·课程设计
再吃一根胡萝卜2 小时前
用 Rust 写一个桌面悬浮图标:为什么它比 Python 更适合 AI 桌面工具?
后端
IT_陈寒2 小时前
Vue的computed属性把我坑惨了,原来我一直用错姿势
前端·人工智能·后端
evans在进步3 小时前
Spring Boot 核心机制详解:可执行 JAR、CORS、静态资源与配置绑定
spring boot·后端·jar
Sayuanni%33 小时前
SpringBoot 从注解到源码:核心知识点总结
java·spring boot·后端
陈随易4 小时前
Bun v1.4 更新总结:把浏览器、图片、定时任务和工程工具都装进一个运行时
前端·后端·程序员
人间凡尔赛5 小时前
2026 后端架构三驾马车:Wasm 容器上 K8s、存算分离与 AI 原生
后端·云原生·架构
凤山老林5 小时前
动态 i18n 体系落地:Spring Boot 多租户热加载与前后端协同实践
java·spring boot·后端·i18n