给出一个Spring-MVC控制器方法:
@RequestMapping(value = "/method")
public void method(@RequestParam int param1,
@RequestParam int param2) { /*...*/ }
如果请求URL中缺少参数,则会报告错误,例如:
JBWEB000068:message必需int参数'param1'不存在
我需要将参数移动到单个模型类中,但保持完全相同的GET请求URL。因此,将method
的参数修改为MyModel model
,其中包含param1
和param2
。
如果省略@RequestParam
但阻止如果缺少参数则报告错误,则此方法有效。另一方面,如果包含@RequestParam
,则在GET请求中需要名为“model”的参数。有没有办法使模型参数成为强制性但保持相同的请求URL?
答案 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 :(得分: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。在这种情况下,您需要求助于请求参数。