亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創建 URI 時出現非法語法錯誤

創建 URI 時出現非法語法錯誤

MMMHUHU 2023-09-27 16:14:32
我正在嘗試生成一個 URI,用于從 ServiceNow API 獲取增量記錄。在執行程序時,我創建一個過濾器并將其與原始 uri 連接起來,并使用 RestAssured 的 get 方法提取結果。雖然上述步驟適用于完整提取,但不知何故,當我嘗試生成帶有過濾條件的 URI 時,我收到非法字符錯誤。我編寫了以下函數,用于從 API 獲取數據:-public static void getURIIncrementalExtract(String tblName, String params) {        RestAssured.baseURI = null;        String params = ""; //For stackoverflow        String displayValueParam = "sysparm_display_value=true&";        String dateParams = "";        dateParams = "sysparm_query=col_updated_on>=2017-09-30"; //+     fromDate        String uri = "https://[servicenowAPIadd].com/api/now/table/" +     tblName + "?" + displayValueParam + params + dateParams;        System.out.println(uri); //URI generated is working correctly in     postman.        RestAssured.baseURI = uri;    }//上面函數生成的uri // https://[servicenowAPIadd].com/api/now/table/[DBtablename]?sysparm_display_value=true&sysparm_query=col_updated_on >=2017-09-30public static Response getResponseByPath() {        Response response = null;        try {            response = RestAssured.given()                    .when()                    .auth()                    .basic(username, password)                    .get(RestAssured.baseURI);        } catch (Exception e) {            e.printStackTrace();            log.error("Exception in getResponseByPath:-" + e.toString());        }        return response;    }    在 main 方法中,我調用 getURIIncrementalExtract,然后調用 getResponseByPath。每當我嘗試添加 sysparm_query 過濾器時,都會收到非法語法異常。如果我刪除過濾器,即“sysparm_query=col_updated_on>=2017-09-30”,它工作正常。我也希望生成并使用 URI 來過濾數據。我認為我生成 URI 的方式可能是錯誤的。有人可以分享正確的方法嗎?如果需要更多信息,請告訴我。
查看完整描述

1 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

您需要在 RestAssured 請求中啟用編碼并使用queryParam(String, String)方法傳遞參數:


RestAssured.baseURI = "https://servicenowAPIadd.com";

RestAssured

    .given()

    .urlEncodingEnabled(true)               //Encoding should be enabled by default anyway

    .queryParam("sysparm_display_value", "true")

    .queryParam("sysparm_query", "col_updated_on>=2017-09-30")

    .when()

    .get("/api/now/table/" + tableName);

如果您需要在另一個地方生成整個 url,請嘗試使用URLEncoder(但您還應該在 RestAssured 中禁用 URL 編碼以防止雙重編碼):


String dateParams = "sysparm_query=" + URLEncoder.encode("col_updated_on>=2017-09-30", "UTF-8"); //Encode your query params here

String uri = "https://servicenowAPIadd.com/api/now/table?" + dateParams;

RestAssured

    .given()

    .urlEncodingEnabled(false)

    .get(uri);


查看完整回答
反對 回復 2023-09-27
  • 1 回答
  • 0 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號