使用rest-assured发送携带请求体的GET请求是否可行?
Rest-Assured GET请求携带请求体实现说明
支持性说明
Rest-Assured 原生支持 GET 请求携带请求体操作。需要注意的是,尽管 HTTP 规范没有明确禁止 GET 请求携带请求体,但部分服务端、网关、反向代理实现会默认忽略 GET 请求的 body 内容,使用前请先确认目标服务的兼容情况。
具体实现方式
GET 请求携带请求体的写法和 POST 等带 body 的请求写法几乎一致,只需要在given()构造请求阶段调用body()方法传入请求体内容,请求方法指定为get()即可:
代码示例
import static io.restassured.RestAssured.given; public class GetWithBodyDemo { public void sendGetWithBody() { // 1. 构造请求体,支持JSON字符串、Map、POJO等多种入参形式 // 示例使用JSON字符串 String reqBody = """ { "keyword": "test", "pageSize": 10, "pageNum": 1 } """; // 2. 发送带请求体的GET请求 given() .contentType("application/json") // 指定请求体格式 .body(reqBody) // 传入构造好的请求体 .when() .get("https://your-target-api.com/path") // 指定为GET请求 .then() .statusCode(200) // 断言响应状态码 .log().body(); // 打印响应结果 } }
其他入参形式说明
如果需要传入Map或者POJO作为请求体,只需要提前引入对应序列化依赖(比如Jackson/Gson),直接传入对象即可,Rest-Assured会自动完成序列化:
// Map形式传参示例 Map<String, Object> reqMap = new HashMap<>(); reqMap.put("keyword", "test"); reqMap.put("pageSize", 10); reqMap.put("pageNum", 1); given() .contentType("application/json") .body(reqMap) .when() .get("/api/path") .then() .statusCode(200);
注意事项
- 建议使用 Rest-Assured 4.0及以上版本,低版本部分场景下可能存在GET请求body丢失的兼容问题
- 若请求发送后服务端无法拿到请求体参数,优先排查链路中是否有中间件丢弃了GET请求的body内容
内容的提问来源于stack exchange,提问作者harmatii1
相关产品推荐
相关产品推荐

