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

相关推荐
卷无止境6 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
狼爷7 小时前
从零用 Java 构建 AI Agent 框架:JavaManus 设计与实现深度解析
后端·langchain·aigc
郑州光合科技余经理7 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
专业程序开发源7 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
专业程序开发源7 小时前
springboot社区养老系统44071-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
小呆呆6668 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
周杰伦fans8 小时前
8GB显存下模型量化实战指南
人工智能·后端·c#
小蒜学长9 小时前
基于SpringBoot的佳新超市管理系统设计与实现系统(代码+数据库+LW)
java·数据库·spring boot·后端·佳新超市管理系统
IT_陈寒9 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
打工仔折腾 AI10 小时前
把AI Agent托管在家用电脑:UU远程终端与端口映射实测记录
人工智能·后端·python·langchain·ai agent 实战