spring-way句柄资源名称中的斜杠

时间:2014-09-11 07:54:49

标签: java spring rest url

我在控制器中有以下方法:

 @RequestMapping(value = "/items/{identifier}", method = RequestMethod.DELETE)
    public void delete(@PathVariable String identifier) {
    ... 
    // find item in database by identifier
}

问题是标识符是字符串,可以包含斜杠(' /')。即情况可能发生:

http://myhost/items/file:/123

对于给定的网址'标识符'必须是"文件:/ 123"。

如果存在' /',则由于URL不正确而导致405(不允许使用方法)。

如何告诉Spring它应该在' / items /' 作为'标识符' (REST术语中的资源名称)?

修改 我被告知管理斜杠和编码是客户的责任,所以我把它保留原样。

但是对于这些信息,请基于评论中的ankur-singhal回答:

在Spring 4.1.0中添加了我想要的支持,请参阅this link和此commit。 所以在我的情况下,它将是:

 @RequestMapping(value = "/items/{/identifier}", method = RequestMethod.DELETE)

' /'之前'标识符'做了一招。

1 个答案:

答案 0 :(得分:1)

尝试将代码更改为下方,看看它是否有效

它将接受identifier的任何值。

 @RequestMapping(value = "/items/{identifier:.*}", method = RequestMethod.DELETE)
    public void delete(@PathVariable String identifier) {
    ... 
    // find item in database by identifier
}

如果您使用identifier作为request parameter,则可以按以下方式实现:

 @RequestMapping(value = "/items", method = RequestMethod.DELETE)
    public void delete(@RequestParam("identifier") String identifier) {
    ... 
    // find item in database by identifier
}

请参阅here了解详情。