【发布时间】:2020-02-20 16:25:38
【问题描述】:
我正在寻找一种在 Java 中解析 URL/URI 的方法,而不必担心常见 URL 的异常。我所知道的Java集成方式分别使用java.net.URIjava.net.URL。
这些类中的每一个都有主要的缺点:
-
java.net.URL无法处理自定义协议/方案,因此使用idontcare://bla.com/test之类的 URL 失败 -
java.net.URI对自定义协议/方案没有任何问题,但如果查询部分包含“非法字符”(非 URL 编码的特殊字符),则会失败。因此,例如在https://bla.example.org/css?family=Roboto:300|Roboto:300,400,500,700&lang=de这样的 URL 中失败
是否有一种通用且不受限制(不会针对上述情况引发错误)的方法来解析 Java 中的 URL?
【问题讨论】:
-
@ y_ug 这个问题是关于相反的方向 - 它是关于构建一个正确编码的 URL,我有一个
String包含一个 url,并且只想访问它的组件,如主机名和协议/方案. -
我明白了。然后那些不想要额外依赖的人(比如 Spring Framework 中的
UriComponents)可以编写自定义协议/方案处理程序和/或实现URLStreamHandlerFactory并通过java.protocol.handler.pkgs属性启用它们或注册URL.setURLStreamHandlerFactory.跨度>