java - 如何将 Java 中的 URI 解析和解码为 URI 组件?

标签 java url decode

我正在尝试找到一种方法来解析 URL、对其进行解码并以明确的方式返回解码后的组件。

URLDecoder不合适,因为它可能会返回不明确的字符串,例如

URLDecoder.decode("http://www.google.com?q=abc%26def", "UTF-8")

返回:

http://www.google.com?q=abc&def 

所以关于转义 & 的信息丢失了。

我想要这样的东西:

DecodedUrlComponents cmp = GreatURLDecoder.decode(url);
Map<String, List<String>> decodedQuery = cmp.getQuery();
decodedQuery.get("q").get(0); //returns "abc&def"

我该如何实现?

编辑: 感谢您的回复,但我的问题有点不同:我想以明确的方式获得解码组件,因此以下都不是我需要的:

  • new URI("http://www.google.com?q=abc%26def").getRawQuery() 返回编码查询:q=abc%26def
  • new URI("http://www.google.com?q=abc%26def").getQuery() 返回不明确的值:q=abc&def
  • URLDecoder.decode("http://www.google.com?q=abc%26def", "UTF-8") 返回不明确的值:http://www .google.com?q=abc&def
  • org.springframework.web.util.UriComponentsBuilder.fromUriString("http://www.google.com?q=abc%26def").build(true).getQueryParams() -关闭,但仍然不是我想要的,因为它返回编码参数的映射:{q=[abc%26def]}

最佳答案

使用 spring 框架 (org.springframework.web.util),您可以执行以下操作:

URI uri = <your_uri_here>;
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUri(uri);
UriComponents uriComponents = uriComponentsBuilder.build();
String path = uriComponents.getPath();
MultiValueMap<String, String> queryParams = uriComponents.getQueryParams(); //etc.

关于java - 如何将 Java 中的 URI 解析和解码为 URI 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29096556/

相关文章:

php - 通过 PHP 更改 URL

php - 在 Symfony 中设置 CsvEncoder 分隔符

php - 如何阅读此 php 代码?

java - 使用maven编译失败

JavaScript 重定向 URL

url - 规范化/规范化 URL?

php - json解码删除新行

java - 编写一个简单的servlet。通过servlet获取和发送数据

java - 多源特定消息聚合和重定向到目的地的 Camel 模式

java - 调整在 java 中读取大型 InputStream 的性能