创建 URI 时出现非法语法错误

我正在尝试生成一个 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-30


public 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 的方式可能是错误的。有人可以分享正确的方法吗?如果需要更多信息,请告诉我。


MMMHUHU
浏览 74回答 1
1回答

ITMISS

您需要在 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 hereString uri = "https://servicenowAPIadd.com/api/now/table?" + dateParams;RestAssured    .given()    .urlEncodingEnabled(false)    .get(uri);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java