java 如何确保强制参数被传递到Spring MVC控制器方法中?

zbwhf8kr  于 2023-04-10  发布在  Java
关注(0)|答案(3)|浏览(118)

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

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

如果请求URL中缺少参数,则会报告错误,例如:
JBWEB000068:message所需的int参数'param 1'不存在
我需要将参数移动到一个模型类中,但保持完全相同的GET请求URL。因此,将method的参数修改为MyModel model,其中包含param1param2
如果@RequestParam被省略了,这就可以工作,但问题是如果参数丢失,则不会报告错误。另一方面,如果包含@RequestParam,则在GET请求中需要一个名为“model”的参数。有没有一种方法可以使model参数成为强制参数,同时保持相同的请求URL?

zujrkrfu

zujrkrfu1#

使用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
    1.Spring验证reference guide
wvmv3b1j

wvmv3b1j2#

你可以尝试@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。在这种情况下,您需要求助于请求参数。

os8fio9y

os8fio9y3#

add(,@BindingResult result)在你的参数中将错误绑定到所有的参数中。你可以使用result.hasErrors()来检查错误是否存在

相关问题