安全地链接URL而不忘记分隔符的正确方法是什么?

时间:2018-07-26 17:24:28

标签: java url concatenation

让我们假设我有类似的方法:

void getMagicUrl(Sting urlBase, String addedPath) {
    urlBase = urlBase.endsWith("/") ? urlBase : urlBase + "/";      // *1*
    urlBase = urlBase + "constantPath/";                            // *2*
    urlBase = urlBase + addedPath;                                  // *3*
    return new URL(urlBase);                                        // *4*
}

在Java(8)中是否没有更好的方法将URL连接在一起,并且没有检查手册的结尾/作为路径分隔符以免忘记? (与 1 行类似)
并始终在路径名中使用它? (如第 2 行)

还是JDK里面有东西?

2 个答案:

答案 0 :(得分:1)

构建url的最有效方法之一就是使用UriComponentsBuilder

类似这样的东西

 UriComponents uriComponents = UriComponentsBuilder.newInstance()
      .scheme("http").host("www.blahblah.com).path("/somepath").build().encode();

 uriComponents.toUriString());

这避免了使用+

进行的所有手动连接

有许多添加路径变量和查询参数的方法。 Here是一篇不错的文章。

答案 1 :(得分:1)

还有更多其他选择来以类型安全和流畅的方式构建url。它们涉及添加新的依赖关系,但是其中一些非常常见且有用。

Apache Commons JavaDoc

URI uri = new URIBuilder()
        .setHost("your_host")
        .setPath("/you_path")
        .setParameter("param1", "value1")
        .build();

uri.toString();

JAX-RS JavaDoc

URI uri= UriBuilder
    .fromPath("your_domain")
    .scheme("http")
    .path("your_path/")
    .queryParam("param1", "value1")
    .build();

URI uri = builder.build();

OkHttp JavaDoc)(GitHub

URL url = new HttpUrl.Builder()
        .scheme("http")
        .host("your_domain")
        .addPathSegments("your_path")
        .addQueryParameter("param1", "value1")
        .build()
        .url();

如果要使用Java 8而没有其他依赖项,则可以直接使用URI类的构造函数,但它不像以前的替代方法那么友好。

URI类JavaDoc

URI uri = new URI("your_host", "your_path", "param1=value1");