我正在实施REST Web API。一些数据在请求体中作为JSON,另一些数据作为URL本身,例如http://myhost/webapp/api/series/GMT/OTHER-DATA
。
此处的关键参数是GMT,它是时区标识符。
当时区标识符包含斜杠时发生问题,例如Europe/London
。由于斜杠是一个特殊字符,我编码了参数,因此我得到了http://myhost/webapp/api/series/Europe%2FLondon/OTHER-DATA
。
我的(网络)客户端无法访问服务器并获得404.我将方法从POST更改为get并看到一切正常。
由于我必须在这里使用POST,我现在发现了一些丑陋的解决办法,但有趣的是知道为什么会发生这种情况?
我正在使用Spring MVC,但我不认为它在这里是相关的:我试图将断点放入Spring的DispatcherServlet
和几个Spring的HTTP过滤器中,这些过滤器通常在一切进展顺利时被调用而我没有看到当URL包含%2F
时,甚至会调用其中一个。
我做了另一个实验。我尝试使用%20
(空格),并发现它可以正常使用GET并且不适用于POST。
我很高兴知道这个问题是否有“好”的解决方案?