如何验证查询参数计数?

时间:2013-02-28 12:37:34

标签: spring spring-mvc

我对spring绑定参数有一些问题。

在我的场景中,我想要一个只接受一个查询参数'q'的控制器方法:

@Controller
@RequestMapping("/home")
public class HomeController {

   @RequestMapping
   public void test(@RequestParam(value = "q") final String q) {
        System.out.println("> " + q);
   }

}

现在,如果我按照我的规范发送有效请求:

GET /home?q=cat

我得到预期的输出:

> cat

如果我发送的请求在我的规范中无效,但仍然作为http请求有效:

GET /home?q=cat&q=black

我得到了模糊和意想不到的结果(我知道为什么春天这样做...数组绑定等:)但它仍然是一个惊喜。):

> cat,black

我不能使用那些参数,它们可能无效。 但我没有简单的方法来验证请求。

1 个答案:

答案 0 :(得分:1)

将参数定义为List<String>并断言它只有一个项目。

@RequestMapping
public void test(@RequestParam(value = "q") final List<String> q) {

    if (q.size() > 1) {
        throw new IllegalArgumentException("Multiple 'q' parameters are not allowed.");
    }

    System.out.println("> " + q);
}