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