【问题标题】:How to set multiple paths in URI builder?如何在 URI 构建器中设置多个路径?
【发布时间】:2021-07-10 22:24:32
【问题描述】:

如何为以下类型创建 URL?我正在做类似下面的事情。如果我同时发送“path”和“PathSegments”值,它只需要 PathSegment 的值而不是路径的值。

"https://localhost/api/customer" + "/" +{Id1} + "/" + "summary?invoiceId=" + {Id2} + "&page=0&pageSize=100&q=" + {Id3} ;

   public static String abcd(String path, List<NameValuePair> paramsLst, String...pathSegment){

    URIBuilder builder1 = new URIBuilder()

        .setScheme("https")
        .setHost("localhost")
        .setPath(path) // "/api/customer"
        .addParameter(paramsLst)
        .setPathSegments(pathSegment);

    return builder1.toString();
    }

【问题讨论】:

  • 我认为您的问题是您在做的事情上使用了错误的术语。这不是多条路径。它是一条路径,路径中有多个组件。 (一个 URI 只能有一个路径。这就是规范所说的。在 URI 中设置 多个 路径没有意义。)无论如何,如果你使用了错误的术语,您将难以理解使用正确术语的 API javadocs、教程等。
  • 感谢@stephen 纠正我。这意味着“path”和“pathSegments”永远不能一起使用?
  • 这取决于您使用的URIBuilder API,您并没有具体说明这一点。但是,如果您在谈论 Apache URIBulder,那是正确的。 setPathsetPathSegments 调用将替换之前的路径/路径段。
  • (如果javadoc不清楚,请阅读源代码。这就是我所做的......)
  • 我正在放心地进行 API 自动化。我想找到一种替代方法来替换我们在一行中编写完整 URL 的方法,就像我在问题中提到的那样。所以,我想用 Apache URIBuilder 来做。但是,如果我必须创建使主要测试用例代码冗长的查询参数列表,则代码中会占用很多行。除了我可以使用的 URIBuilder 或者这个应该没问题,你能建议任何其他方式吗?

标签: java url uri rest-assured


【解决方案1】:

你可以试试:

URIBuilder uriBuilder = new URIBuilder();

uriBuilder.setScheme("https");
uriBuilder.setHost("localhost");
uriBuilder.setPathSegments("api", "customer", "id1Value", "summary");
uriBuilder.addParameters(paramsList);

或者你可以尝试使用org.springframework.web.util.UriComponentsBuilder:

URI uri = UriComponentsBuilder.newInstance()
        .scheme("https")
        .host("localhost")
        .path("api/customer/{id1}/summary")
        .queryParams(params) // MultiValueMap
        .buildAndExpand("id1Value") // value for {id1} in the path
        .toUri();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2017-02-05
    • 2011-09-19
    • 2020-08-18
    • 1970-01-01
    • 2012-08-17
    • 2022-12-10
    相关资源
    最近更新 更多