2013-02-28 64 views
0

我有一些问题,如何弹簧绑定参数。如何验证查询参数计数?

在我的情况我想只接受一个查询参数“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 

如果我发送的请求是无效的我的sp ecification,但仍然是HTTP请求有效:

GET /home?q=cat&q=black 

我得到模棱两可的和意想不到的结果(我为什么春天做...阵列结合等:)但它仍然是一个惊喜的想法。):

> cat,black 

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

回答

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); 
} 
+0

是的,这是我使用了第一种解决方法(字符串[]在我的情况:))。我正在寻找更优雅,更有弹性的方式来做到这一点。不过谢谢。 :) – masted 2013-02-28 13:10:22

+0

您可以尝试[这里](http://stackoverflow.com/q/6203740/1276804)中描述的技术。 – zagyi 2013-02-28 13:44:23

+0

好吧,我找不到更优雅的解决方案:)伤心难过。 – masted 2013-03-01 09:35:02