Java Rest Assured过度处理我的get请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Rest Assured过度处理我的get请求相关的知识,希望对你有一定的参考价值。
我正在尝试连接到REST API(不是我自己的,所以我无法解决他们的问题)但是当我发送GET请求时,Rest Assured正在重新处理我的URI,导致调用失败。
以下是构建请求的代码:
Call rest = new Call("https://rest.test.com"); // Custom class to simplify REST calls.
JSONObject searchCriteria = new JSONObject();
searchCriteria.put("textSearchType", "SEARCHNAME");
searchCriteria.put("textSearchString", "joe blow");
String header = "Lead Inline Quick Search";
StringBuilder resource = new StringBuilder("/api/v1/search?");
resource.append("searchCriteria=")
.append(URLEncoder.encode(searchCriteria.toString()))
.append("&header=")
.append(URLEncoder.encode(header));
System.out.println("REST call: " + resource.toString());
rest.get(resource.toString(), 200); // Perform a get on the query, expect a 200 response
当我查看输出时,请求是正确的:
REST call: /api/v1/search?searchCriteria=%7B%22textSearchString%22%3A%22joe+blow%22%2C%22textSearchType%22%3A%22SEARCHNAME%22%7D&header=Lead+Inline+Quick+Search
但是,当我查看Rest Assured的调试时,它会重新处理导致调用失败的请求:
Request method: GET
Request URI: https://rest.test.com/api/v1/search?searchCriteria=%257B%2522textSearchString%2522%253A%2522joe%2Bblow%2522%252C%2522textSearchType%2522%253A%2522SEARCHNAME%2522%257D&header=Lead%2BInline%2BQuick%2BSearch
注意:
- '{'从网络编码正确转换为'%7B'并在
resource
中正确显示,但Rest Assured然后进一步将所有'%'转换为'%25',使得json无效({变为%257B)。 - 由于某种原因,标题中的“+”被转换为'%20'。虽然技术上相同,但没有理由“修复”它。
如果我在构建资源时不对值进行编码,则get调用将失败,因为它会看到空格。
IllegalArgumentException-Invalid number of path parameters. Expected 1, was 0. Undefined path parameters are: "textSearchString":"joe blow","textSearchType":"SEARCHNAME".
那么对值进行编码的正确方法是什么?或者让Rest Rest确保不要用它发送的字符串来猴子?
答案
来自@Hypino的评论让我走上正轨。
将.urlEncodingEnabled(false)
添加到.given()
并没有改变结果(调用仍然是双重处理)。但是将.setUrlEncodingEnabled(false)
添加到RequestSpecBuilder()
给出了正确的结果。
private RequestSpecBuilder build = new RequestSpecBuilder().setUrlEncodingEnabled(false);
记录的呼叫和实际呼叫现在是相同的:
REST call: /api/v1/search?searchCriteria=%7B%22textSearchString%22%3A%22joe+blow%22%2C%22textSearchType%22%3A%22SEARCHNAME%22%7D&header=Lead+Inline+Quick+Search
Request method: GET
Request URI: https://rest.test.com/api/v1/search?searchCriteria=%7B%22textSearchString%22%3A%22joe+blow%22%2C%22textSearchType%22%3A%22SEARCHNAME%22%7D&header=Lead+Inline+Quick+Search
以上是关于Java Rest Assured过度处理我的get请求的主要内容,如果未能解决你的问题,请参考以下文章
Rest Assured 不使用自定义 ObjectMapper
java 使用Rest Assured和Spring Boot来休息Api文档