基于查询参数将相同URL映射到spring中的不同控制器

基于查询参数将相同URL映射到spring中的不同控制器,spring,url,mapping,Spring,Url,Mapping,我使用的是基于spring注释的控制器。如果查询参数标签存在,我希望我的URL/用户/消息映射到某个控制器a,否则映射到某个不同的控制器b。这是必需的,因为当存在参数标记时,可以同时存在更多的参数以及我希望在不同控制器中处理的参数,以保持实现的干净。在spring中有什么方法可以做到这一点吗。这个问题还有其他优雅的解决方案吗?如果你想走Spring路线,你可以查看上面提到的HandlerInterceptor。拦截器可以查看您的查询参数,并将链接重定向到另一个SimpleUrlMapper可以捕

我使用的是基于spring注释的控制器。如果查询参数标签存在,我希望我的URL/用户/消息映射到某个控制器a,否则映射到某个不同的控制器b。这是必需的,因为当存在参数标记时,可以同时存在更多的参数以及我希望在不同控制器中处理的参数,以保持实现的干净。在spring中有什么方法可以做到这一点吗。这个问题还有其他优雅的解决方案吗?

如果你想走Spring路线,你可以查看上面提到的HandlerInterceptor。拦截器可以查看您的查询参数,并将链接重定向到另一个SimpleUrlMapper可以捕获的其他内容


另一种方法是,如果查询参数为“b”,则将其发送到单个控制器,并让控制器转发到另一个操作。

您可以使用
@RequestMapping
注释的
params
属性根据Http参数选择控制器方法

请参见此示例:

@RequestMapping(params = "form", method = RequestMethod.GET)
public ModelAndView createForm() {
    ...
}

@RequestMapping(method = RequestMethod.GET)
public ModelAndView list() {
    ...
}

这是一种类似SpringRoo使用的REST样式:如果请求包含参数
forms
,则使用
createForm
处理程序,如果不使用
list
方法,则使用
list
处理程序。

HandlerInterceptor听起来很酷,但目前我认为我将采用第二种方法。我不太清楚如何在基于spring的控制器中检查某个参数的存在或不存在。即使我知道某个查询参数存在或不存在,我也需要在控制器中进行检查以根据该参数采取操作,所以如果(tag==someValue)然后我将执行x,但如果没有名为“tag”的参数,如何处理?@kcr:不确定我是否理解这个问题,但您可以在控制器中使用HttpServletRequest并调用getParameterMap,它将为您提供当前请求的键和值的映射。然后,您可以查询映射以查看参数是否存在。听起来不错,稍后将进行尝试…目前,我找到了一种类似@RequestParam(value=“tag”,required=false)的替代方法,然后检查“tag”参数的null值这应该是可接受的答案。