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

RESTAssured添加查询参数后URL出现%3A异常编码如何解决

RESTAssured GET请求查询参数%3A异常问题解决

问题原因说明

  • 日志中URL里出现的%3A不是无效异常值,是URL标准编码规则下对冒号:的转义结果,完全符合RFC 3986规范,服务端接收请求时会自动解码还原为原始冒号字符,默认不会影响接口正常调用。
  • 你之前尝试的URLEncoder.encode(uri, StandardCharsets.UTF_8)方案存在用法错误:URLEncoder仅适用于编码URL的参数片段,不能直接编码完整请求URI。编码后URI中协议部分的https://里的特殊字符也会被转义,RESTAssured无法识别到合法的绝对请求地址,就会自动拼接默认的localhost:8080作为基础域名,导致请求地址异常。

可行解决方案

方案1:无需修改代码(推荐)

现有代码生成的请求完全符合HTTP URL规范,date=2022-04-01T00%3A00%3A00Z和未编码的date=2022-04-01T00:00:00Z在协议层面完全等价,绝大多数服务端框架都能自动解析该格式参数,直接发起请求即可。

方案2:特殊场景下关闭查询参数自动编码

如果对接的服务端存在非标准实现,强制要求查询参数中的冒号不做转义,可以通过修改RESTAssured的编码器配置关闭默认的查询参数URL编码,代码示例如下:

Response response = RestAssured.given()
        .config(RestAssured.config()
                .sslConfig(this.getSslConfig())
                // 调整编码器配置
                .encoderConfig(EncoderConfig.encoderConfig()
                        .queryParameterCharset(StandardCharsets.UTF_8)
                        // 关闭查询参数的form-urlencoded自动编码
                        .encodeQueryParametersAsFormUrlEncoded(false)
                ))
        .filter(new AllureRestAssured())
        .contentType(appJsonContentType)
        .headers(requestHeader)
        .queryParams(queryParams)
        .when()
        .log().all()
        .get(uri);

注意:关闭自动编码后需要自行校验传入的查询参数值符合URL规范,不能包含空格、中文、未转义的特殊保留字符,否则会导致请求解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:03:25