我在控制器中有以下方法:
@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)
' /'之前'标识符'做了一招。
答案 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了解详情。