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

Spring后端POST请求报错:不支持application/x-www-form-urlencoded类型

问题解决:Spring后端提示Content-Type不支持的处理方案

这个错误的核心原因是:你的Spring Controller方法默认期望接收application/json类型的请求体,但前端发送的是application/x-www-form-urlencoded(表单编码格式),两者不匹配导致报错。以下是两种直接可行的解决方式:

方案一:后端适配表单编码请求

如果需要保留前端的表单提交方式,可修改Controller的参数接收逻辑:

  1. 移除方法参数上的@RequestBody注解,Spring会自动将表单参数绑定到DTO对象(要求DTO字段名与表单参数名完全一致)
  2. 在@PostMapping中显式声明支持的Content-Type

示例代码:

// 修改后的Controller方法
@PostMapping(value = "/board/writepro", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public ResponseEntity<?> writeBoard(BoardDto boardDto) {
    // 调用Service层保存逻辑
    boardService.saveBoard(boardDto);
    return ResponseEntity.ok("发布成功");
}

注意:如果DTO包含嵌套对象,这种方式无法自动解析,建议改用方案二。

方案二:前端改为发送JSON格式(推荐)

RESTful接口更推荐使用JSON格式传递数据,只需调整前端请求配置:
在React的请求代码中,指定Content-Type为application/json,并将数据转为JSON字符串发送。

示例代码:

const submitBoard = async (formData) => {
  try {
    const res = await fetch('/board/writepro', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(formData),
    });
    const result = await res.json();
    // 处理响应结果
  } catch (err) {
    console.error('提交失败:', err);
  }
};

此时后端Controller可保持原有@RequestBody的写法不变:

@PostMapping("/board/writepro")
public ResponseEntity<?> writeBoard(@RequestBody BoardDto boardDto) {
    boardService.saveBoard(boardDto);
    return ResponseEntity.ok("发布成功");
}

额外注意事项

  • 确保DTO类的字段名与前端传递的参数名一致,若有大小写差异可使用@JsonProperty注解指定别名
  • 检查全局配置是否禁用了表单编码或JSON的消息转换器

内容的提问来源于stack exchange,提问作者박진후

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:52:08