2010-03-29 30 views
0

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

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

因此,请求会是这个样子(与DELETE)在地区之间

http://host:port/regionnameID 

这些REST请求的REST一个联邦是正确的URL编码

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

然后,请求看起来像这样

http://host:port/region/nameID 

这是由于HttpRequesthandler的REST URL的不正确的解释时,有该地区的名称是“/”。

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

有什么方法/配置/工作可以做,以防止HttpRequestHandler从返回404

+0

这就是为什么这种REST风格的URL并不总是合适的。当您有各种可能的输入时,查询参数会更好。 – skaffman 2010-03-29 10:21:48

回答

0

这是一个有点脏的问题。我想在这里做的是使用Spring @RequestMapping注解。这里有一些文档: http://static.springsource.org/spring/docs/2.5.x/reference/mvc.html

您可以在通过@RequestMapping传递的值中使用特定的ant通配符。如果区域数量有限,那么可以将它们全部映射为单个方法,如下所示: @RequestMapping(value = {“/ region1 **”,“/ region2 **”,“/ region3 **”)

在您的控制器方法中,您将不得不添加额外的逻辑来解析nameID。

如果你有大量的区域,我会创建一个单独的Spring Web应用程序(servlet)来处理这些请求。该应用程序将有一个区域的缓存查找表。

1

您应该用urlrwrite重写您的网址,并在内部使用查询参数。

<rule> 
<name>Inbound:</name> 
<from>^(.*)ID$</from> 
<to last="true">delete?regionName=$1</to> 
</rule> 

添加您urlrewrite过滤器中的所有其他过滤器的前面在web.xml

+0

(+1)不错的建议 – skaffman 2010-03-29 17:00:51