让我们假设我有类似的方法:
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里面有东西?
答案 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();
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");