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

Spring Boot POST接口接收表单编码请求时字符串末尾多出=符号问题

问题产生原因

接口声明消费的媒体类型是application/x-www-form-urlencoded,这是标准的表单提交格式,数据结构固定为键=值的键值对形式,多组参数用&分隔。
Spring处理这种格式的请求时,会自动调用FormHttpMessageConverter对请求体做解析:当传入的请求内容是不带=的1时,转换器会默认将这段内容识别为参数名,对应的参数值为空字符串,后续将解析结果序列化为字符串返回时,会自动按照表单格式拼接=分隔键和值,最终返回1=的结果,这是组件的标准处理逻辑,不是框架bug。

修复方案

根据实际业务场景二选一即可:

  • 场景1:接口本意是接收纯文本内容,不需要表单格式
    1. 将接口的consumes属性修改为MediaType.TEXT_PLAIN_VALUE,明确接口接收纯文本类型的请求体
    2. 修正后的代码示例:

@RestController
public class MyApi{
@PostMapping(path = "/", consumes = {MediaType.TEXT_PLAIN_VALUE})
public String parseInput(@RequestBody String data) {
return data;
}
}

3. 调用时可以明确指定请求头避免被误识别为表单:`curl -H "Content-Type: text/plain" -d "1" http://localhost:1337/`,此时接口会正常返回`1`。
- 场景2:接口确实需要接收`application/x-www-form-urlencoded`格式的表单请求
不要直接用`@RequestBody String`接收整个请求体,改用`@RequestParam`注解绑定对应参数即可。如果需要获取原始的表单请求字符串,可以自定义请求包装器提前缓存原始请求流,绕开表单转换器的默认解析逻辑,这类非标准操作无特殊需求不推荐使用。

内容的提问来源于stack exchange,提问作者Anthony Vinay
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:36:29