Java SpringMVC:需要最简单的表单处理、绑定和验证示例

Java SpringMVC:需要最简单的表单处理、绑定和验证示例,java,data-binding,spring-mvc,validation,Java,Data Binding,Spring Mvc,Validation,我有一张表格: <form action="/processform"> <input name="firstname" value="john" /> <input name="lastname" value="doe" /> </form> 我希望接收这些数据,对其执行验证,并将其发布到数据存储 如何编写控制器来执行此操作?我知道我可以将参数作为请求参数传入,但我认为“正确”的方法是以某种方式将表单中的数据绑定到Person对象,

我有一张表格:

<form action="/processform">
   <input name="firstname" value="john" />
   <input name="lastname" value="doe" />
</form>
我希望接收这些数据,对其执行验证,并将其发布到数据存储

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


读了很多书之后,这一步让我感到困惑。有人能告诉我“绑定”数据、“验证”(例如验证器)和“处理”数据(例如控制器,特别是作为参数传递给它的内容)需要什么吗?

Spring有一个完整的教程,展示了您需要的各个方面。它叫“宠物诊所”。您可以从以下位置查看:

吉特


这就是我一直在寻找的答案,我不知道Spring在默认情况下会从表单提交中获取所有参数(例如“firstname”和“lastname”),并且可以通过调用这些参数的setter方法为您创建对象

控制员:

@Controller
public class MyFormProcessor {
   @RequestMapping("/formsubmit")
   public String handleForm(@Valid Person person, BindingResult errors, Map<String,Object> model){
      // ...handle form...
   }
}
对于验证,您可以创建自己的验证器(我在这里不会提及任何内容),或者如果在类路径中包含Hibernate验证器,则可以对
Person
类进行注释(下面的示例)当您添加我在上面示例中描述的
@Valid
注释时,Hibernate验证器将基于这些注释验证类,并将任何错误发布到错误对象(一个
BindingResult
对象是Springs的
Errors
的扩展,对于简单的例子,
Errors
对象是有趣的组件)

JSR-303验证注释人员类(用于@Valid选项):


好的,我想我还没有掌握的两个具体问题:1)在o.s.s.petclinic.web.FinDownPerform中,processSubmit方法接受所有者对象。Spring做了一些事情来创建那个对象,它做了什么?2) 在o.s.s.petclinic.web.AddPetForm中,processSubmit()方法接受ModelAttribute(“pet”),我相信我理解这意味着在调用此方法之前已将条目添加到模型中,但是谁做的??
@Controller
public class MyFormProcessor {
   @RequestMapping("/formsubmit")
   public String handleForm(@Valid Person person, BindingResult errors, Map<String,Object> model){
      // ...handle form...
   }
}
Person person = new Person();
person.setFirstname( request.getParameter("firstname") );
person.setLastname( request.getParameter("lastname") );
handleForm(person, anErrorsObject, new Model());
public class Person {
   @NotNull
   @Size(min=3, max=20)
   private String firstname;

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

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