有没有正确的方法来构建URL?

2022-08-31 20:54:18

在我使用的大部分代码中,都有一些可怕的东西,比如:

String url = "../Somewhere/SomeServlet?method=AMethod&id="+object.getSomething()+ "&aParam="+object.getSomethingElse());

或者 - 更糟糕的是:

String url = "Somewhere/Here/Something.jsp?path="+aFile.toString().replace("\\","/")+ "&aParam="+object.getSomethingElse());

有没有正确的方法:

  1. 创建新的 URL(或者它是一个 URI)。
  2. 向其添加正确转义的参数。
  3. 在这些参数中添加格式正确的文件路径。
  4. 将其解析为字符串。

从本质上讲 - 仅仅构建字符串比正确完成它太容易了。有没有办法正确地做到这一点,就像构建字符串一样简单?

添加

为了清楚起见 - 经过一番思考 - 我想我正在寻找这样的东西:

String s = new MyThing()
    .setPlace("Somewhere/Something.jsp")
    .addParameter(aName,aValue)
    .addParameter(aName,aFile)
    .toString();

这样它就会处理所有逃避并添加“?”/“&” 并将 “\” 更改为 “/” 而不是对文件等使用 “\”。

如果我必须自己写一个(即如果Apache不是一个选项),是否有真正的Java技术可以正确转义各个部分。我的意思是像在参数中转义“”之类的事情,作为“.”,而在其他地方转义“”“,即”%20”。


答案 1

您可以使用Apache URIBuilder

示例代码:完整的 Apache 示例

URIBuilder builder = new URIBuilder()
    .setScheme("http")
    .setHost("apache.org")
    .setPath("/shindig")
    .addParameter("helloWorld", "foo&bar")
    .setFragment("foo");
builder.toString();

输出:http://apache.org/shindig?helloWorld=foo%26bar#foo


答案 2

您还可以使用弹簧UriComponentsBuilder

UriComponentsBuilder
    .fromUriString(baseUrl)
    .queryParam("name", name)
    .queryParam("surname", surname)
    .build().toUriString();