java.lang.IllegalArgumentException:索引处的路径中的非法字符
问题描述:
在链接中,我有{
和}
字符。在chrome/ff(也就是?)中,当我点击该链接时,它将用%7B
和}
替换{
,用%7D
替换{
。不幸的是,在歌剧中它不是。如果我的URLEncoder.encode
的链接,然后%7B
在其他浏览器中变成%257B
(那么我得到一个404 @资源)。所以当我点击歌剧中的链接时,我得到了java.lang.IllegalArgumentException: Illegal character in path at index
。我很困惑:java.lang.IllegalArgumentException:索引处的路径中的非法字符
- 为什么不对歌剧编码
{
和}
? - 为什么抛出异常?为什么不直接编码URL并继续?
- 如何解决这个问题,而不会破坏其他浏览器中的链接(附加编码)?
编辑:我们使用jersey,因为它的堆栈跟踪说:
java.lang.IllegalArgumentException: Illegal character in path at index
java.net.URI.create(URI.java:859)
javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:95)
com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:879)
com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:843)
com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:804)
答
混淆(即它是严重命名)URLEncoder的是为将数据作为参数,而不是用于编码网址本身。
我们用org.apache.commons.httpclient.util.URIUtil.encodePath但看起来现在这已经走了(因为1.4?),并且建议是使用java.net.URI中的,而不是: What happened to URIUtil.encodePath from commons-httpclient-3.1?