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

相关推荐
浮尘笔记18 小时前
Go语言临时对象池:sync.Pool的原理与使用
开发语言·后端·golang
梦梦代码精19 小时前
BuildingAI vs Dify vs 扣子:三大开源智能体平台架构风格对比
开发语言·前端·数据库·后端·架构·开源·推荐算法
REDcker19 小时前
RESTful API设计规范详解
服务器·后端·接口·api·restful·博客·后端开发
没有bug.的程序员21 小时前
Java 序列化:Serializable vs. Protobuf 的性能与兼容性深度对比
java·开发语言·后端·反射·序列化·serializable·protobuf
我爱娃哈哈1 天前
SpringBoot + Spring Security + RBAC:企业级权限模型设计与动态菜单渲染实战
spring boot·后端·spring
小王不爱笑1321 天前
SpringBoot 配置文件
java·spring boot·后端
想用offer打牌1 天前
Spring AI vs Spring AI Alibaba
java·人工智能·后端·spring·系统架构
码农幻想梦1 天前
实验五 spring入门及IOC实验
java·后端·spring
a程序小傲1 天前
蚂蚁Java面试被问:向量数据库的相似度搜索和索引构建
开发语言·后端·python·架构·flask·fastapi
派大鑫wink1 天前
【Day39】Spring 核心注解:@Component、@Autowired、@Configuration 等
java·后端·spring