Spring MVC Form Validation
malong 发布于 2021-02-23

Spring Validation用于验证@Controller输入。它用于检查和接受任何web应用程序中的用户输入。使用Spring验证,我们可以在服务器端验证用户输入。

Bean验证API

从Spring Framework Version4和更高版本来看,Spring框架支持Bean验证1.0(JSR-303)和Bean验证1.1(JSR-349)。
下面给出了用于验证的注释:
@Valid–@Valid注释用于注释方法参数、属性或方法返回类型以进行验证。它用于注释我们要验证的模型对象。
BindingResult–它是一个表示绑定结果的接口。它扩展了一个错误注册接口,允许应用验证器,并添加了特定于绑定的分析。


验证注释
springmvc表单验证中使用了多种注释,可以在javax.validation.constraints约束包裹。
以下是常用验证注释的列表:

Annotations

Description

@Size

It specifies that the size of the annotated element must be between the specified boundaries.

@Pattern

它指定带注释的CharSequence必须与正则表达式匹配.

@Past

它指定带注释的元素必须是过去的日期.

@Null

它指定带注释的元素必须为null.

@NotNull

它指定带注释的元素不应为null.

@Min

它指定带注释的元素必须是一个值必须等于或大于指定的最小值的数字.

@Max

它指定带注释的元素必须是一个值必须等于或小于指定最大值的数字.

@Future

它指定带注释的元素必须是将来的日期

@Digits

它指定带注释的元素必须是指定范围内的数字或数字。支持的类型有shortintlongbyte.

@DecimalMin

它指定带注释的元素必须是一个值必须等于或大于指定最小值的数字。它与@Min注释非常相似,但唯一的区别是它支持CharSequence类型.

@DecimalMax

它指定带注释的元素必须是一个值应等于或小于指定最大值的数字。它与@Max annotation非常相似,但唯一的区别是它支持CharSequence类型.

@AssertTrue

它确定带注释的元素必须为true.

@AssertFalse

它确定带注释的元素必须为false.



springmvc验证示例

这里,我们将在Controller类中使用@Valid注释创建一个springmvc验证的示例。
以下是创建Spring Validator示例的步骤:
创建请求页
在这一步中,我们将创建一个名为index.jsp.

index.jsp

 <html>
<body>
<h2> Spring MVC Web application </h2>
<a href = "cust-regis-form"> Customer Registration Form </a>
</body>
</html>

创建模型类

在这一步中,我们将创建一个名为客户.java,存储数据。在Customer类中,我们将在“lname”变量上使用@NotNull和@Size注释。

Customer.java

 import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class Customer {
                private String fname;
                @NotNull
                @Size(min = 3, message = " This field is required ")
                private String lname;
                public String getFname() {
                                return fname;
                }
                public void setFname(String fname) {
                                this.fname = fname;
                }
                public String getLname() {
                                return lname;
                }
                public void setLname(String lname) {
                                this.lname = lname;
                }
 }

创建Controller

在这一步中,我们将创建名为MainController.java,返回JSP视图页。在控制器类中,我们将使用@Valid注解和BindingResult进行验证。

MainController.java

import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MainController {
                @RequestMapping("/cust-regis-form")
                public String showCustomerForm(Model m) {
                                m.addAttribute("customer", new Customer()) ;
                                return "customerform" ;
                }
                @RequestMapping("/processForm")
                public String showCustomerData( @Valid @ModelAttribute("customer") Customer custom,
                                                BindingResult thebindingresult) {
                                if (thebindingresult.hasErrors()) {
                                                return "customerform" ;
                                }
                                else {
                                                return "customerformdata" ;
                                }
    }
 }

将控制器条目添加到Web.xml

在这一步中,我们将在Web.xml文件。


web.xml


将模型条目添加到另一个XML文件中

在这一步中,我们将把Model/bean定义到另一个名为spring的XML文件中spring-servlet.xml.

spring-servlet.xml


创建其他JSP页面

在这一步中,我们将创建其他视图页面(JSP页面)。
customerform.jsp文件


customerformdata.jsp


为了克服所讨论的问题,我们将在控制器中使用@InitBinder注释。@InitBinder用作预处理器,用于修剪字符串前的空白。
Spring MVC @InitBinder

@InitBinder注释用于初始化WebDataBinder,WebDataBinder用于扩展命令并形成带注释的处理程序方法的对象参数。
为了访问@InitBinder注释,我们需要在名为MainController.java 类。
MainController.java



malong
关注 私信
文章
35
关注
0
粉丝
0