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

相关推荐
喵了几个咪7 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
Flynt8 小时前
我把微信运动的排行榜和定点推送复刻了一遍:100万次步数更新只要4秒,坑在别处
redis·后端·性能优化
_孤傲_10 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
IT_陈寒11 小时前
Java静态变量初始化坑得我头皮发麻
前端·人工智能·后端
步行cgn12 小时前
Thymeleaf 编辑表单详解:从字段回填到模拟 PUT 请求
后端
Song_RsHt13 小时前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
学长毕设13 小时前
基于SpringBoot的建筑材料管理系统-附源码
java·spring boot·后端
程序员cxuan13 小时前
掀桌子了!Kimi K3.1 Pro 这效果也太离谱了。
人工智能·后端·程序员
摸爬滚打的小李13 小时前
关于 Arthas
java·后端
武子康14 小时前
黑图、彩色噪声、NaN、偏色怎么排查
人工智能·后端·agent