Spring Boot创建接口返回415 Unsupported Media Type问题求助
解决Spring Boot接口415 Unsupported Media Type错误
错误原因
你的控制器方法使用了@RequestBody注解,该注解仅支持解析JSON/XML格式的请求体,但你在Postman中使用了form-data格式提交参数,Spring无法识别这种媒体类型,因此返回415错误。
方案一:改用JSON格式提交请求(推荐)
这是REST接口的标准传参方式:
- 在Postman的Body标签中,选择
raw-> 下拉框选JSON - 传入仅包含
title和body的JSON数据(uuid和created_at会在TaskDTO中自动生成):
{ "title": "示例标题", "body": "示例内容" }
- Postman会自动添加请求头
Content-Type: application/json,Spring就能正确将请求体绑定到TaskDTO对象。
方案二:修改控制器支持form-data格式
如果必须使用form-data传参,去掉@RequestBody,改用@ModelAttribute(或直接省略,Spring会自动绑定表单参数):
@PostMapping public ResponseEntity<?> create(@ModelAttribute TaskDTO requestTask) { System.out.println(requestTask); // 修正构造函数参数:直接传入UUID对象,而非字符串 Task newTask = new Task(requestTask.getUuid(), requestTask.getTitle(), requestTask.getBody(), requestTask.getCreated_at()); Task task = taskRepository.save(newTask); return ResponseEntity.ok().body(task); }
注意:Postman中form-data的参数名必须和TaskDTO的字段名(title、body)完全一致。
额外代码优化建议
除了415错误,你的代码还有几个需要修正的细节:
- Task实体的created_at注解错误:
@GeneratedValue是主键生成注解,不能用于时间字段,改用JPA自动生成创建时间的注解:
@Getter @Setter @CreationTimestamp @Column(updatable = false) // 禁止后续修改该字段 private LocalDateTime created_at;
- TaskDTO字段封装规范:将public字段改为private,通过getter/setter访问(符合Java封装原则):
@Getter @Setter public class TaskDTO { private UUID uuid = UUID.randomUUID(); private String title; private String body; private LocalDateTime created_at = LocalDateTime.now(); }
- UUID主键生成策略明确:为Task的UUID字段指定生成策略,适配不同数据库:
@Id @Getter @GeneratedValue(strategy = GenerationType.UUID) private UUID uuid;
内容的提问来源于stack exchange,提问作者user19163958
相关产品推荐
相关产品推荐

