我正在尝试找到一种方法来解析 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/