java - Spring-MVC:需要最简单的表单处理、绑定(bind)和验证示例

标签 java data-binding spring-mvc validation

我有一个表格:

<form action="/processform">
   <input name="firstname" value="john" />
   <input name="lastname" value="doe" />
</form>

我有一个 Person 对象:

public class Person {
   private String firstname;
   private String lastname;
   // ... getters & setters ...
}

我想接收此数据,对其执行验证,然后将其发布到数据存储区。

如何编写 Controller 来执行此操作?我知道我可以将参数作为请求参数传递,但我认为执行此操作的“正确”方法是以某种方式将数据从表单绑定(bind)到 Person 对象,然后在 Controller 中接收该 Person 对象并调用 Validate 对象被配置为接收 Person 对象。

经过大量阅读,这一步让我感到困惑。有人可以告诉我“绑定(bind)”数据、“验证”(例如 validator )和“处理”数据(例如 Controller ,特别是作为参数传递给它的内容)需要什么吗?

最佳答案

这是我一直在寻找的答案,我不明白 Spring 默认情况下会从表单提交中获取所有参数(例如“名字”和“姓氏”)并可以创建对象你通过调用这些参数的setter方法。

Controller :

@Controller
public class MyFormProcessor {
   @RequestMapping("/formsubmit")
   public String handleForm(@Valid Person person, BindingResult errors, Map<String,Object> model){
      // ...handle form...
   }
}

在为此请求调用 handleForm 之前,Spring 本质上是在执行以下魔术(显然以比我为这个简单示例描述的更可扩展的方式):

Person person = new Person();
person.setFirstname( request.getParameter("firstname") );
person.setLastname( request.getParameter("lastname") );
handleForm(person, anErrorsObject, new Model());

对于验证,您可以创建自己的 validator (我不会在这里提及任何内容),或者如果您在类路径中包含 Hibernate Validator,那么您可以注释 Person 类(示例下面)并且当您添加 @Valid 注释时,如我在上面的示例中描述的那样,Hibernate validator 将根据这些注释验证类并将任何错误发布到错误对象(BindingResult 对象是 Springs 的 Errors 的扩展,对于简单的示例,Errors 对象是有趣的组件)。

JSR-303 验证注释的 Person 类(与 @Valid 选项一起使用):

public class Person {
   @NotNull
   @Size(min=3, max=20)
   private String firstname;

   @NotNull
   @Size(min=3, max=20)
   private String lastname;

   // ... getters & setters ...
}

关于java - Spring-MVC:需要最简单的表单处理、绑定(bind)和验证示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112149/

相关文章:

java - if(scanner.nextInt){} 被忽略 (java)

javascript - 自动为数据提供不同的 View

jakarta-ee - 如何将war文件部署到cPanel中并删除项目名称?

java - Spring Boot 与 JAX-RS (ReSTLet) 的简单微服务对比

java - 生成的 JAR 文件未执行

java - 获取 UUID 安卓

java - 从左上角绘制点击之间的绘制线

xamarin.forms - 如何在选择器的所选项目更改时触发命令

asp.net-mvc - asp.net mvc 强类型助手 - 您的渲染绑定(bind)对象是否应该与您的发布对象相同?

java - 使用 ActionMapping 重定向到另一个 portlet