我们有一个应用程序通过客户端发出的REST请求进行通信。
REST请求包含“区域名称”和“ID”作为参数
因此,请求看起来像这样(对于DELETE)
http://host:port/regionnameID
联盟中区域之间的这些REST请求是正确的URL编码
如果区域名称中包含斜杠(“/”),我发现这些请求失败。
然后,请求看起来像这样
http://host:port/region/nameID
这是因为当区域名称中有“/”时,HttpRequesthandler对Rest URL的解释不正确。
现在,我们无法控制在Region名称中使用“/”发送REST请求的客户端。
是否有任何方法/配置/解决方法可以阻止HttpRequestHandler返回404
答案 0 :(得分:1)
您应该使用urlrwrite重写您的网址,并使用内部查询参数。
<rule>
<name>Inbound:</name>
<from>^(.*)ID$</from>
<to last="true">delete?regionName=$1</to>
</rule>
在web.xml
中的所有其他过滤器前添加urlrewrite过滤器答案 1 :(得分:0)
这是一个肮脏的问题。我在这里尝试做的是使用Spring @RequestMapping注释。这里有一些文档: http://static.springsource.org/spring/docs/2.5.x/reference/mvc.html
您可以在传递@RequestMapping的值中使用特定的蚂蚁通配符。如果区域数量有限,则可以将它们全部映射到单个方法,如下所示: @RequestMapping(值= { “/ REGION1 **”, “/区域2 **”, “/区3 **”)
在您的控制器方法中,您必须添加额外的逻辑来解析nameID。
如果你有大量的区域,我会创建一个单独的Spring Web应用程序(servlet)来处理这些请求。该应用程序将有一个缓存的区域查找表。
答案 2 :(得分:-1)
配置您自己的handlerMapping bean(可能基于AbstractUrlHandlerMapping)