如何确保将强制参数传递给Spring MVC控制器方法?

时间:2014-01-10 09:14:17

标签: java spring spring-mvc parameters bean-validation

给出一个Spring-MVC控制器方法:

@RequestMapping(value = "/method")
public void method(@RequestParam int param1,
                   @RequestParam int param2) { /*...*/ }

如果请求URL中缺少参数,则会报告错误,例如:

  

JBWEB000068:message必需int参数'param1'不存在

我需要将参数移动到单个模型类中,但保持完全相同的GET请求URL。因此,将method的参数修改为MyModel model,其中包含param1param2

如果省略@RequestParam但阻止如果缺少参数则报告错误,则此方法有效。另一方面,如果包含@RequestParam,则在GET请求中需要名为“model”的参数。有没有办法使模型参数成为强制性但保持相同的请求URL?

2 个答案:

答案 0 :(得分:4)

使用JSR-303注释来验证对象(并且在这种情况下不使用基元,而是使用Object表示。)

public class MyObject {
    @NotNull
    private Integer param1;

    @NotNull
    private Integer param2;

    // Getters / Setters

}

控制器方法。

@RequestMapping(value = "/method")
public void method(@Valid MyObject obj) { /*...*/ }

如果你的类路径上没有JSR-303提供程序(例如hibernate-validator),请创建一个Validator并使用它来验证你的对象。

链接。

  1. Spring MVC reference guide
  2. Spring验证reference guide

答案 1 :(得分:0)

您可以尝试@ModelAttribute和method = RequestMethod.POST: 在您的控制器中:

//...
@RequestMapping(value="/method", method=RequestMethod.POST)
public String add(@ModelAttribute("modelName") ModelClass form)
{
   //.. your code
}

//..

在你的JSP中:

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="f" %>

//.. some code 

<f:form action="method" method="post" modelAttribute="modelName">

</f:form>

如果仅限于GET请求,则可能无法使用单独的ModelClass。在这种情况下,您需要求助于请求参数。