我有以下代码片段来解码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());
}