REST API中consumes/produces application/json含义及SpringBoot示例咨询
关于REST API中
consumes和produces的明确定义与SpringBoot示例 核心定义
produces
- 声明当前API接口能返回给客户端的数据格式,明确告知客户端:该接口只会输出指定类型的响应内容。比如
produces = "application/json"表示接口响应体为JSON格式。
consumes
- 声明当前API接口能接受的客户端请求数据格式,明确告知客户端:只有发送指定类型的请求体,接口才会处理该请求。比如
consumes = "application/json"表示接口仅接受JSON格式的请求体。
SpringBoot(Java)实战示例
1. 方法级单独配置
针对单个接口指定请求/响应格式:
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { // 仅接受JSON请求体,返回JSON格式响应 @PostMapping(value = "/users", consumes = "application/json", produces = "application/json") public User createUser(@RequestBody User user) { // 模拟业务逻辑:生成用户ID并返回 user.setId(1L); return user; } } // 配套的User实体类 class User { private Long id; private String username; private String email; // 省略getter、setter、全参/无参构造方法 }
2. 类级别全局配置
如果Controller下所有接口遵循相同的格式规则,可在类上统一配置:
import org.springframework.web.bind.annotation.*; @RestController @RequestMapping(value = "/api/v1", consumes = "application/json", produces = "application/json") public class ApiController { @GetMapping("/users/{id}") public User getUser(@PathVariable Long id) { // 模拟查询用户 User user = new User(); user.setId(id); user.setUsername("demo_user"); return user; } @PutMapping("/users") public User updateUser(@RequestBody User user) { // 模拟更新用户 return user; } }
3. 支持多格式场景
若接口需要兼容多种请求/响应格式,可通过数组形式声明:
@PostMapping(value = "/data", consumes = {"application/json", "application/xml"}, produces = {"application/json", "application/xml"}) public DataResponse processData(@RequestBody DataRequest request) { // 模拟数据处理逻辑 return new DataResponse(); } // 配套的请求、响应实体类(需支持XML序列化,可通过JAXB注解配置) class DataRequest { /* 字段及getter/setter */ } class DataResponse { /* 字段及getter/setter */ }
内容的提问来源于stack exchange,提问作者mdaabis
相关产品推荐
相关产品推荐

