You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot创建接口返回415 Unsupported Media Type问题求助

解决Spring Boot接口415 Unsupported Media Type错误

错误原因

你的控制器方法使用了@RequestBody注解,该注解仅支持解析JSON/XML格式的请求体,但你在Postman中使用了form-data格式提交参数,Spring无法识别这种媒体类型,因此返回415错误。


方案一:改用JSON格式提交请求(推荐)

这是REST接口的标准传参方式:

  1. 在Postman的Body标签中,选择raw -> 下拉框选JSON
  2. 传入仅包含title和body的JSON数据(uuid和created_at会在TaskDTO中自动生成):
{
    "title": "示例标题",
    "body": "示例内容"
}
  1. 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错误,你的代码还有几个需要修正的细节:

  1. Task实体的created_at注解错误:@GeneratedValue是主键生成注解,不能用于时间字段,改用JPA自动生成创建时间的注解:
@Getter
@Setter
@CreationTimestamp
@Column(updatable = false) // 禁止后续修改该字段
private LocalDateTime created_at;
  1. 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();
}
  1. UUID主键生成策略明确:为Task的UUID字段指定生成策略,适配不同数据库:
@Id
@Getter
@GeneratedValue(strategy = GenerationType.UUID)
private UUID uuid;

内容的提问来源于stack exchange,提问作者user19163958

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:45:43