Spring Framework HttpRequestHandler失败

时间:2010-03-29 09:56:33

标签: java spring spring-mvc

我们有一个应用程序通过客户端发出的REST请求进行通信。

REST请求包含“区域名称”和“ID”作为参数

因此,请求看起来像这样(对于DELETE)

http://host:port/regionnameID  

联盟中区域之间的这些REST请求是正确的URL编码

如果区域名称中包含斜杠(“/”),我发现这些请求失败。

然后,请求看起来像这样

http://host:port/region/nameID  

这是因为当区域名称中有“/”时,HttpRequesthandler对Rest URL的解释不正确。

现在,我们无法控制在Region名称中使用“/”发送REST请求的客户端。

是否有任何方法/配置/解决方法可以阻止HttpRequestHandler返回404

3 个答案:

答案 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