Spring请求映射到特定路径变量值的不同方法
Posted
技术标签:
【中文标题】Spring请求映射到特定路径变量值的不同方法【英文标题】:Spring request mapping to a different method for a particular path variable value 【发布时间】:2015-09-28 11:27:51 【问题描述】:@Controller
@RequestMapping("/authors")
public class AuthorController
@RequestMapping(value = "/id", method = RequestMethod.GET)
public Author getAuthor(
final HttpServletRequest request,
final HttpServletResponse response,
@PathVariable final String id)
// Returns a single Author by id
return null;
@RequestMapping(value = "/id/author-properties", method = RequestMethod.GET)
public AuthorProperties getAuthorProperties(
final HttpServletRequest request,
final HttpServletResponse response,
@PathVariable final String id)
// Returns a single Author's List of properties
return null;
@RequestMapping // How to map /authors/*/author-properties to this method ????
public List<AuthorProperties> listAuthorProperties(
final HttpServletRequest request,
final HttpServletResponse response)
// Returns a single Author's List of properties
return null;
class Author
String propertiesUri;
// other fields
class AuthorProperties
String authorUri;
// other fields
基本上我需要:
/authors - 列出所有作者 /authors/123 - 通过 id 123 获取作者 /authors/123/author-properties - 获取 123 作者的 AuthorProperties 对象 /authors/*/author-properties - 获取所有作者的 AuthorProperties 列表当我尝试时
@RequestMapping(value = "/*/author-properties", method = RequestMethod.GET)
它仍在将/authors/*/author-properties
映射到getAuthorProperties 方法,路径变量值为“*”。
【问题讨论】:
当我将 /*/author-properties 的方法保留在 /id/author-properties 的方法之前,它就开始工作了。那么这是一个适当的解决方案吗?我们是否可以始终将映射的处理顺序作为方法声明的顺序进行传递? 【参考方案1】:看看这是否有效
@RequestMapping(value = "/id:.*/author-properties", method = RequestMethod.GET)
【讨论】:
【参考方案2】:您可以使用正则表达式限制单个作者的映射,例如:
@RequestMapping("/authorId:\\d+/author-properties")
public String authorProperties(@PathVariable String authorId)
这只会匹配作者 ID 为数字的 URL。
对于您可以使用的所有作者属性的请求:
@RequestMapping("/*/author-properties")
public String allProperties()
Hovewer *
具有特殊含义,因此它也将匹配 /foo/author-properties
。要解决它,您可以使用以下内容:
@RequestMapping("/all:\\*/author-properties")
public String allProperties()
【讨论】:
【参考方案3】:如果为所有作者获取 AuthorProperties 列表是常见的情况,那么我认为您应该创建一个这样的 URI:“/author-properties”。否则 Bohuslav 给出的答案就是你想要的。
【讨论】:
以上是关于Spring请求映射到特定路径变量值的不同方法的主要内容,如果未能解决你的问题,请参考以下文章
Spring Web MVC:对请求参数和路径变量使用相同的请求映射