java.lang.IllegalArgumentException:索引处路径中的非法字符

时间:2012-09-14 14:40:54

标签: jsp url encoding jersey opera

在链接中,我有{}个字符。在chrome / ff(和ie?)中,当我点击该链接时,它会将{替换为%7B,将}替换为%7D。不幸的是,在歌剧中它没有。如果我URLEncoder.encode链接,那么%7B在其他浏览器中变为%257B(因此我获得了404 @该资源)。所以,当我点击歌剧中的链接时,我得到java.lang.IllegalArgumentException: Illegal character in path at index。我很困惑:

  1. 为什么opera不编码{}
  2. 为什么要抛出异常?为什么不对URL进行编码并继续?
  3. 如何解决这个问题而不破坏其他浏览器中的链接(带额外编码)?
  4. 编辑:我们正在使用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)
    

1 个答案:

答案 0 :(得分:0)

令人困惑(即命名错误)URLEncoder用于将数据作为参数传递,而不是用于编码URL本身。

我们使用org.apache.commons.httpclient.util.URIUtil.encodePath但现在看起来已经消失了(从1.4开始?),建议改为使用java.net.URI: What happened to URIUtil.encodePath from commons-httpclient-3.1?

也看看这个:HTTP URL Address Encoding in Java

相关问题