使用rest-assured Kotlin扩展发起POST请求时body为空问题咨询
问题根因
你遇到的是rest-assured 4.4.0版本官方Kotlin DSL的已知实现缺陷,和你的写法逻辑无关:
- Java风格链式API直接调用核心库的原生方法,请求构造上下文全程连续,设置的body会被正确传递到请求发送环节,因此可以正常执行。
- 首字母大写的
Given/When/ThenKotlin 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版本,可以选择两种兼容写法:
- 继续使用你已经验证可行的Java风格链式API
- 把所有请求相关的参数都放到
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
相关产品推荐
相关产品推荐

