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

使用rest-assured Kotlin扩展发起POST请求时body为空问题咨询

问题根因

你遇到的是rest-assured 4.4.0版本官方Kotlin DSL的已知实现缺陷,和你的写法逻辑无关:

  • Java风格链式API直接调用核心库的原生方法,请求构造上下文全程连续,设置的body会被正确传递到请求发送环节,因此可以正常执行。
  • 首字母大写的Given/When/Then Kotlin DSL语法在4.4.0版本存在上下文传递bug:不同代码块之间的请求构造参数没有做合并处理,Given块中设置的body没有被传递到When块的请求构造逻辑,最终发出去的请求body就为空。
解决方案

方案1(推荐)

升级rest-assured依赖版本到4.5.0及以上,官方已经在后续版本修复了该Kotlin DSL的参数丢失问题,升级后你原本的DSL写法可以直接正常运行。

方案2(兼容4.4.0版本)

如果受项目限制必须使用4.4.0版本,可以选择两种兼容写法:

  1. 继续使用你已经验证可行的Java风格链式API
  2. 把所有请求相关的参数都放到When块内设置,绕过跨块参数传递的缺陷,示例如下:
When {
  body("hello")
  post("/endpoint/")
} Then {
  statusCode(HttpStatus.SC_CREATED)
}
验证方法

你可以开启rest-assured的全量请求日志,确认修改后body已经被正确携带:

Given {
  log().all()
  body("hello")
}
When {
  post("/endpoint/")
} Then {
  log().all()
  statusCode(HttpStatus.SC_CREATED)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:48:07