Spring MVC请求映射显式禁止参数


问题内容

我遇到了Spring(3.1)映射难题:我有一个简单的findAll方法:

@RequestMapping( method = RequestMethod.GET )
@ResponseBody
public List< User > findAll(){
    return findAllInternal();
}

这将映射以下URI(这是很好)/user

但是,它也映射到:/user?bla=8,这不好。

有没有一种方法可以明确指定此特定映射不包含任何参数的事实?我尝试在中指定params@RequestMapping但看不到明确的方法。

任何帮助表示赞赏。

谢谢。


问题答案:

您可以否定@RequestMapping.param属性中的参数。

@RequestMapping( method = RequestMethod.GET, params = "!bla")

从Spring 3.1开始,您不能明确禁止请求具有参数。

但是说实话,这几乎没有必要。

有三种用例:

  1. bla 是可以显式允许/禁止的已知参数。
  2. bla 是未知参数,可以忽略。
  3. 您想以特殊方式处理参数未知的请求(例如,引发错误)。

前两个可以在spring mvc中完成。第三个是AFAIK,不能。

第三个选项也有潜在的危险,因为您必须非常小心客户端可以发送给服务器的参数(例如安全框架添加的内容等)。