使用Rest Assured时含逗号的URL返回404错误,Postman/浏览器可正常访问
解决Rest Assured中URL含逗号导致404的问题
我之前也碰到过一模一样的问题!你猜的没错,问题根源就是URL里的逗号——浏览器和Postman会自动帮你处理特殊字符的URL编码,但Rest Assured默认不会这么做,直接发送带逗号的URL会让服务器解析错误,返回404。下面给你几个靠谱的解决办法:
方法1:手动替换逗号为URL编码值
逗号对应的URL编码是%2C,直接把URL里的逗号换成这个编码值就行。比如原来的baseURL/catName,cat version改成baseURL/catName%2Ccat version。
Rest Assured代码示例:
given() .baseUri("https://你的baseURL.com") .when() .get("/catName%2Ccat version") .then() .statusCode(200);
方法2:用URLEncoder动态编码路径部分
如果你的路径是动态生成的(比如从变量里获取),手动替换太麻烦,可以用Java自带的URLEncoder来编码整个路径片段:
import java.net.URLEncoder; import java.nio.charset.StandardCharsets; // 动态生成的路径部分 String pathSegment = "catName,cat version"; // 编码路径,指定UTF-8字符集 String encodedSegment = URLEncoder.encode(pathSegment, StandardCharsets.UTF_8.toString()); given() .baseUri("https://你的baseURL.com") .when() .get("/" + encodedSegment) .then() .statusCode(200);
方法3:配置Rest Assured自动编码URL
如果不想每次都手动编码,可以全局配置Rest Assured开启URL编码功能,这样它会自动处理路径里的特殊字符:
import io.restassured.RestAssured; import io.restassured.config.EncoderConfig; // 全局配置自动编码 RestAssured.config = RestAssured.config() .encoderConfig(EncoderConfig.encoderConfig() .encodeContentTypeAs("application/x-www-form-urlencoded", ContentType.URLENC)); // 或者更简单的全局开关 RestAssured.urlEncodingEnabled = true; // 之后正常写请求就行,逗号会被自动编码 given() .baseUri("https://你的baseURL.com") .when() .get("/catName,cat version") .then() .statusCode(200);
为什么Postman和浏览器没问题?
因为它们在发送请求前,会自动对URL中的特殊字符(逗号、空格、问号等)进行URL编码,服务器收到的是编码后的正确路径,所以能正常返回内容。而Rest Assured默认不会自动编码路径中的特殊字符,导致服务器无法识别这个URL,所以返回404。
内容的提问来源于stack exchange,提问作者aviral
相关产品推荐
相关产品推荐

