用有效的查询解码URL



我有以下代码片段来解码Java中的url:

public URL decodeURL(String url) {
try {
return new URL(URLDecoder.decode(url, StandardCharsets.UTF_8));
} catch (MalformedURLException e) {
throw new IllegalArgumentException(e.getMessage());
}
}

所以对于下面的URL"path/to/testurl/encoding?param=1&encodedQueryParam=table%3Dtask%5EORtableISEMPTY",我应该得到"path/to/testurl/encoding?param=1&encodedQueryParam=table=task^ORtableISEMPTY",但我得到"/path/to/testurl/encoding"

我怎样才能得到正确的结果?

首先,当我在本地运行代码时,我得到了java.net.MalformedURLException: no protocol的异常

然后我将https://添加到示例url中。

最后我得到了正确的结果,代码的差异是字符集参数所以我想也许这是错误的导入URLDecoder类?

import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;

public void test() throws Exception{
System.out.println(decodeURL("https://path/to/testurl/encoding?param=1&encodedQueryParam=table%3Dtask" +
"%5EORtableISEMPTY"));
}
public URL decodeURL(String url) {
try {
return new URL(URLDecoder.decode(url, "UTF-8"));
} catch (MalformedURLException e) {
throw new IllegalArgumentException(e.getMessage());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}

控制台日志如下:

https://path/to/testurl/encoding?param=1&encodedQueryParam=table=task^ORtableISEMPTY

URL.getPath()方法不包括查询参数作为结果。您需要单独访问它。

的例子:

StringBuilder fullPath = new StringBuilder(url.getPath());
if(url.getQuery() != null) {
fullPath.append("?").append(url.getQuery());
}

相关内容

  • 没有找到相关文章