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