[英]Java Rest Assured is over processing my get request
我試圖連接到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
注意:
resource
正確顯示,但是Rest Assured隨后將所有'%'轉換為'%25',從而使json無效({變為%257B)。 如果在構建資源時不對值進行編碼,則get調用將失敗,因為它會看到空格。
IllegalArgumentException-Invalid number of path parameters. Expected 1, was 0. Undefined path parameters are: "textSearchString":"joe blow","textSearchType":"SEARCHNAME".
那么編碼值的正確方法是什么? 還是讓“放心的人”不要胡鬧發送的字符串?
@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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.