为了账号安全,请及时绑定邮箱和手机立即绑定

创建 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 关注
  • 50 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信