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

Curl POST请求至SpringBoot后端时数值均变为0的问题排查

PowerShell下curl请求SpringBoot接口数值参数绑定失败问题解决

问题场景

在SpringBoot后端服务中,使用PowerShell终端执行curl POST请求时,JSON中的数值参数无法正确绑定到DTO:

  • 当DTO字段为int类型时,接收值恒为0
  • 将字段改为Integer类型时,接收值变为null
  • 字符串参数可正常绑定

执行的请求命令:

curl --request POST --header "Content-Type: application/json" --data '{"key": 5}' http://localhost:8080/request

控制器代码:

@RestController
@RequestMapping("/request")
class MyController {
    @PostMapping
    public ResponseEntity<MuseumTO> createMuseum(@RequestBody RequestDTO request) {
        System.out.println(request.key);
        // ...
    }
}

DTO代码:

class RequestDTO {
    public int key;
}

问题根源

PowerShell中的curl是Invoke-WebRequest的别名,它对命令行参数的引号处理逻辑和原生curl不同。使用单引号包裹JSON数据时,PowerShell无法正确识别JSON结构,导致SpringBoot的JSON反序列化器无法解析数值字段。

解决方案

方案1:转义JSON内部双引号并使用双引号包裹

在PowerShell中,用双引号包裹整个JSON内容,同时对JSON内部的双引号用反引号`进行转义:

curl --request POST --header "Content-Type: application/json" --data "{`"key`": 5}" http://localhost:8080/request

方案2:调用原生curl(若已安装)

如果系统中安装了原生curl(如通过Chocolatey或手动下载),直接使用curl.exe代替curl,即可遵循原生curl的参数处理逻辑:

curl.exe --request POST --header "Content-Type: application/json" --data '{"key": 5}' http://localhost:8080/request

方案3:从文件读取JSON payload

将JSON内容保存到本地文件(如payload.json):

{"key": 5}

通过--data @文件名参数读取文件内容发送请求:

curl --request POST --header "Content-Type: application/json" --data @payload.json http://localhost:8080/request

额外检查点

  • 确保DTO类字段声明语法正确(示例代码中public int key缺少分号,需修正)
  • 虽然SpringBoot支持直接绑定public字段,若后续仍有绑定问题,可尝试为字段添加标准getter/setter方法

内容的提问来源于stack exchange,提问作者Thibaut B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:15:40