0

我对 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

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

> cat,black

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

4

1 回答 1

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);
}
于 2013-02-28T12:43:21.820 回答