簡體   English   中英

Java Rest Assured已過度處理我的get請求

[英]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

注意:

  • '{'已從Net編碼正確轉換為'%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".

那么編碼值的正確方法是什么? 還是讓“放心的人”不要胡鬧發送的字符串?

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM