Java 带有编码URL的HTTP POST无效

Java 带有编码URL的HTTP POST无效,java,http,spring-mvc,Java,Http,Spring Mvc,我正在实现RESTWebAPI。一些数据以JSON的形式存在于请求体中,另一些数据则存在于URL本身中,例如http://myhost/webapp/api/series/GMT/OTHER-DATA 这里的关键参数是GMT,它是时区标识符。 时区标识符包含斜杠时会出现问题,例如Europe/London。由于斜杠是一个特殊字符,我对参数进行了编码,因此得到了http://myhost/webapp/api/series/Europe%2FLondon/OTHER-数据 我的(web)客户端无法

我正在实现RESTWebAPI。一些数据以JSON的形式存在于请求体中,另一些数据则存在于URL本身中,例如
http://myhost/webapp/api/series/GMT/OTHER-DATA

这里的关键参数是GMT,它是时区标识符。 时区标识符包含斜杠时会出现问题,例如
Europe/London
。由于斜杠是一个特殊字符,我对参数进行了编码,因此得到了
http://myhost/webapp/api/series/Europe%2FLondon/OTHER-数据

我的(web)客户端无法访问服务器,并获得404。我改变了从POST到get的方法,看到一切都很好

因为我必须在这里使用POST,所以现在我发现了一些不好的工作,但很有趣的是知道为什么会发生这种情况

我使用的是Spring MVC,但我认为这与此无关:我试图将断点放在Spring的
DispatcherServlet
和几个Spring的HTTP筛选器中,这些筛选器通常在一切正常时调用,但我没有看到在URL包含
%2F
时调用其中一个

我又做了一个实验。我试着用
%20
(空格)来代替,结果发现它可以很好地用于GET,而不能用于POST


我很想知道这个问题是否有一个“好”的解决方案?

看看这个答案,它为你提供了一个更好的使用POST的方法:谢谢,@Alex van den Hoogen(+1)。不幸的是,这对我没有帮助:我无法更改客户端,必须找到服务器端修复程序。您能描述一下您的技术堆栈吗?例如Apache、Tomcat等。编码的斜杠通常在默认情况下被禁用,因为它们会带来安全风险。