【发布时间】:2011-09-20 21:22:52
【问题描述】:
我正在使用基于 spring 注释的控制器。我希望我的 URL /user/messages 映射到某个控制器 a 如果查询参数标签存在,否则映射到某个不同的控制器 b。这是必需的,因为当存在参数标记时,可以存在更多参数以及我想在不同控制器中处理的参数,以保持实现干净。春天有什么方法可以做到这一点。这个问题还有其他优雅的解决方案吗?
【问题讨论】:
我正在使用基于 spring 注释的控制器。我希望我的 URL /user/messages 映射到某个控制器 a 如果查询参数标签存在,否则映射到某个不同的控制器 b。这是必需的,因为当存在参数标记时,可以存在更多参数以及我想在不同控制器中处理的参数,以保持实现干净。春天有什么方法可以做到这一点。这个问题还有其他优雅的解决方案吗?
【问题讨论】:
可以使用@RequestMapping注解的params属性根据Http参数选择控制器方法。
看这个例子:
@RequestMapping(params = "form", method = RequestMethod.GET)
public ModelAndView createForm() {
...
}
@RequestMapping(method = RequestMethod.GET)
public ModelAndView list() {
...
}
它是类似 Spring ROO 使用的 REST 样式:如果请求包含参数 forms,则使用 createForm 处理程序,否则使用 list 方法。
【讨论】:
如果你想走 Spring 路线,你可以查看提到的 HandlerInterceptor here。拦截器可以查看您的查询参数并将链接重定向到可以被另一个 SimpleUrlMapper 捕获的其他内容。
另一种方式是将其发送到单个控制器,如果查询参数为“b”,则让控制器转发到另一个动作。
【讨论】: