使用RestAssured发起GET请求传递JSON查询参数,返回全量数据如何解决
问题原因及修复方案
核心问题点
- 参数名不匹配:代码中声明的查询参数名为
query,但实际生成的请求URL中参数名为params,接口无法识别到你传递的筛选条件,默认返回全量数据。 - 序列化方式错误:直接将HashMap对象传入
param()方法时,RestAssured会默认调用HashMap的toString()方法做序列化,输出的内容不是标准JSON格式,接口无法正常解析参数内容。 - 缺少URL编码:JSON字符串包含
{}、"等特殊字符,未做URL编码直接作为查询参数传递会导致解析失败。
修复步骤
- 先确认接口文档规定的筛选参数名,保证代码中参数名和接口要求完全一致。
- 引入JSON序列化工具(比如Jackson、Gson)将HashMap转为标准JSON字符串,再做URL编码后传入参数。
修正后代码示例
import com.fasterxml.jackson.databind.ObjectMapper; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; // Request object using RestAssured RequestSpecification httpRequest = RestAssured.given(); ObjectMapper objectMapper = new ObjectMapper(); HashMap<String, String> queryParams = new HashMap<>(); queryParams.put("kit_config_id", "60db53ec7a334172b005b692"); // 转JSON后做URL编码 String jsonStr = objectMapper.writeValueAsString(queryParams); String encodedJson = URLEncoder.encode(jsonStr, StandardCharsets.UTF_8); // 替换为接口实际要求的参数名,比如接口要求参数名为params就写params Response response = httpRequest.given() .baseUri("https://qa-api-test.com") .param("params", encodedJson) // 这里参数名和接口要求保持一致 .when() .get("/imageProps");
内容的提问来源于stack exchange,提问作者chirag25
相关产品推荐
相关产品推荐

