如何正确传递Map类型查询参数?路径参数异常排查
解决方案
1. 替换路径中的占位符{id}
错误核心是请求URL里保留了路径参数占位符{id}未替换为实际数值。测试框架会将{}识别为待填充的路径参数,而你未提供对应值,导致框架误把编码后的filters参数里的{当成路径参数占位符,触发参数数量不匹配错误。
修改URL,把{id}替换为具体Long类型数值,比如123:
given.body(Map()).when .get(s"/somepath/123?page=1&perPage=25&sort=label&filters=$encodedFilters") .then() .statusCode(200)
2. 优化filters参数构造(可选)
当前filterMap外层多了一层"filters"键,但API的filters参数仅需接收内部数组JSON。现有写法传递的是{"filters": [...]},可能不符合API预期,调整为:
// 直接构造过滤条件数组,无需外层"filters"键 val filterArray = Seq( Map( "field" -> "listType", "operator" -> "Equals", "values" -> Seq("filter") ) ) val filtersInJson = write(filterArray) val encodedFilters = URLEncoder.encode(filtersInJson, "UTF-8")
3. 使用框架参数传递方法(推荐)
避免手动拼接URL参数,改用测试框架的pathParam和queryParam方法,自动处理编码与参数解析:
val filterArray = Seq( Map( "field" -> "listType", "operator" -> "Equals", "values" -> Seq("filter") ) ) val filtersInJson = write(filterArray) given.body(Map()) .pathParam("id", 123) // 设置路径参数id .queryParam("page", 1) .queryParam("perPage", 25) .queryParam("sort", "label") .queryParam("filters", filtersInJson) // 框架自动处理URL编码 .when.get("/somepath/{id}") .then().statusCode(200)
这种方式既能避免手动拼接URL的错误,也能确保参数被正确解析,不会出现路径参数识别混乱的问题。
内容的提问来源于stack exchange,提问作者Friendly Programmer
相关产品推荐
相关产品推荐

