📜  Spring MVC - 号码验证

📅  最后修改于: 2022-05-13 01:54:48.102000             🧑  作者: Mango

Spring MVC - 号码验证

Spring Web 模型-视图-控制器 (MVC) 是一个用于构建 J2EE Web 应用程序的开源框架。它基于 Model-View-Controller 设计模式,实现了一个核心 spring 框架的基本特性——依赖注入。它是围绕一个“DispatcherServlet”设计的,它将请求分派给处理程序,具有可配置的处理程序映射、视图分辨率、语言环境和主题分辨率以及对上传文件的支持。 Spring Framework 支持使用标准验证注解的 Bean 验证。

弹簧应用

在此示例中,我们将在 Spring Tool Suite (STS) 中构建一个简单的 Spring MVC 应用程序,该应用程序接受用户输入并使用标准验证注释使用数字验证输入。此外,如何在屏幕上显示错误消息,以便用户可以重新输入以使其有效。当我们使用标准注释验证 bean 属性时,我们还需要在“pom.xml”文件中包含一些额外的依赖项,即validation-apihibernate-validator

验证 API:

它包含所有 Bean Validation 提供的约束在包javax.validation.constraints 下也称为内置约束。以下是此包中提供的一些注释类型。

Annotation Type

Description

AssertFalse  The annotated element must be false.
AssertTrueThe annotated element must be true.
DigitsThe annotated element must be a number within the accepted range.
NotNull  The annotated element must not be null.
Min  The annotated element must be a number whose value must be higher or equal to the specified minimum.
Past  The annotated element must be a date in the past.
Pattern  The annotated CharSequence must match the specified regular expression.
Size  The annotated element size must be between the specified boundaries included.
Max  The annotated element must be a number whose value must be lower or equal to the specified maximum.
Future  The annotated element must be a date in the future.

要使用这些注释,我们需要在“pom.xml”文件中添加以下依赖项。

XML

    javax.validation
    validation-api
    1.1.0.Final


XML

    org.hibernate
    hibernate-validator
    5.2.4.Final


Java
package com.geeksforgeeks.app;
  
import java.util.Date;
  
import javax.validation.constraints.Digits;
import javax.validation.constraints.Past;
  
import org.hibernate.validator.constraints.CreditCardNumber;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;
  
public class Info {
      
    @NotEmpty(message = "Enter your name.")
    private String name;
    @DateTimeFormat(pattern = "dd/MM/yyyy")
    @Past(message = "Enter valid date.")
    private Date birthDate;
    @Digits(message="Number should contain 10 digits.", fraction = 0, integer = 10)
    private String phNum;
    @Email(message="Enter valid Email Id.")
    private String email;
    @CreditCardNumber(message="Enter valid card number.")
    private String card;
      
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getCard() {
        return card;
    }
    public void setCard(String card) {
        this.card = card;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBirthDate() {
        return birthDate;
    }
    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }
    public String getPhNum() {
        return phNum;
    }
    public void setPhNum(String phNum) {
        this.phNum = phNum;
    }
      
}


XML

    joda-time
    joda-time
    2.10.10


Java
package com.geeksforgeeks.app;
  
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;
import org.springframework.web.bind.annotation.RequestMethod;
  
@Controller
public class InfoController {
      
    @RequestMapping(value = "/")
    public String viewPage(Model model) {
  
        Info info = new Info();
        model.addAttribute("info", info);
        return "info";
    }
  
    @RequestMapping(value = "/submit", method = RequestMethod.POST)
    public String submit(@Valid @ModelAttribute("info") Info info, BindingResult result) {
        if (result.hasErrors()) {
            return "info";
        }
        else {
            return "summary";
        }
    }
  
}


HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>




Welcome Page


  
    

Welcome to GeeksforGeeks!!

    

Please fill in the form

                                                                                                                                                                                                                                                                                                                                                                             
Full Name:                 
Date of Birth:                 
Phone Number:                 
Email Id:                 
Card Number:                 
Submit
    
  


HTML
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Summary page


  
    

Details submitted!

                                                                                                                                                                                                                                        
Name:${info.name}
Date of Birth:${info.birthDate}
Phone Number:${info.phNum}
Email:${info.email}
Card Number:${info.card}
  


休眠验证器:

它包含包org.hibernate.validator.constraints 下用于 bean 验证的所有 Hibernate 验证器特定约束。以下是此包中提供的一些注释类型。

Annotation Type

Description

CreditCardNumber  The annotated element has to represent a valid credit card number based on Luhn algorithm implementation.
Email  The annotated string element has to be a well-formed email address.
Length  To validate the string is between min and max included.
NotEmpty  The annotated element/string, collection, map or array must not null or empty.
Range  The annotated element has to be in the specified range.
URL  To validate that the string is a valid URL.
Mod11Check  Modulo 11 check constraint.

要使用这些注释,我们需要在“pom.xml”文件中添加以下依赖项。

XML


    org.hibernate
    hibernate-validator
    5.2.4.Final

创建应用程序的步骤

1)在 Spring Tool Suite 中创建一个 Spring MVC 项目。

2)在STS中,根据开发者选择创建项目时,会下载所有需要的maven依赖,*.jar,lib文件,并提供嵌入式服务器。

3)我们可以在“pom.xml”文件中看到所有需要的依赖项。

4)创建一个Bean类、Controller类和JSP视图页面。

5)下面是Spring MVC项目创建后的最终项目结构*. Java和 *.jsp 文件。

项目结构

项目结构

执行

要创建的文件如下:

  1. 信息。 Java – Bean 类 – 定义字段属性和属性的 getter/setter 方法。
  2. 信息控制器。 Java – 控制器类 – 处理用户请求并生成输出。
  3. info.jsp – 与用户交互以进行输入的 JSP 文件。
  4. summary.jsp – 处理输入后向用户显示输出的 JSP 文件。

1)信息。 Java文件:

Java

package com.geeksforgeeks.app;
  
import java.util.Date;
  
import javax.validation.constraints.Digits;
import javax.validation.constraints.Past;
  
import org.hibernate.validator.constraints.CreditCardNumber;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;
  
public class Info {
      
    @NotEmpty(message = "Enter your name.")
    private String name;
    @DateTimeFormat(pattern = "dd/MM/yyyy")
    @Past(message = "Enter valid date.")
    private Date birthDate;
    @Digits(message="Number should contain 10 digits.", fraction = 0, integer = 10)
    private String phNum;
    @Email(message="Enter valid Email Id.")
    private String email;
    @CreditCardNumber(message="Enter valid card number.")
    private String card;
      
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getCard() {
        return card;
    }
    public void setCard(String card) {
        this.card = card;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBirthDate() {
        return birthDate;
    }
    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }
    public String getPhNum() {
        return phNum;
    }
    public void setPhNum(String phNum) {
        this.phNum = phNum;
    }
      
}

' Info ' 类有五个属性:name、birthDate、phNum、card 和 email。这些标记有一些标准的验证注释:

  • @NotEmpty:元素“名称”值不应为空。
  • @Past:元素 'birthDate' 值应该是过去的日期。
  • @Digits(fraction=0, integer=10):元素 'phNum' 值应包含 10 位数字。
  • @Email:元素“电子邮件”值应采用正确的电子邮件格式。
  • @CreditCardNumber:元素 'card' 值应该是有效的卡号。
  • @DateTimeFormat(pattern=”dd/MM/yyyy”): 元素 'birthDate' 值将采用指定模式,其中 'dd' 代表 'Date','MM' 代表 'Month' 并且 'yyyy' 代表 'Year' .

如果上述任何验证失败,它会显示我们指定的消息以及注释类型。除此之外,我们还需要为所有属性添加 getter 和 setter 以获取和设置值。要使用“@DateTimeFormat”注释,我们需要在“pom.xml”文件中包含以下依赖项。

XML


    joda-time
    joda-time
    2.10.10

2)信息控制器。 Java文件:

Java

package com.geeksforgeeks.app;
  
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;
import org.springframework.web.bind.annotation.RequestMethod;
  
@Controller
public class InfoController {
      
    @RequestMapping(value = "/")
    public String viewPage(Model model) {
  
        Info info = new Info();
        model.addAttribute("info", info);
        return "info";
    }
  
    @RequestMapping(value = "/submit", method = RequestMethod.POST)
    public String submit(@Valid @ModelAttribute("info") Info info, BindingResult result) {
        if (result.hasErrors()) {
            return "info";
        }
        else {
            return "summary";
        }
    }
  
}

这个控制器有一个映射到'/'的GET方法和一个映射到'/submit'的POST方法。

使用的注释:

  • @Controller 向容器传达这个类是 spring 控制器类。要使用这个注解,我们需要导入 org.springframework.stereotype.Controller 包。
  • @RequestMapping,根据提供的值将请求 URL 映射到指定的方法。要使用这个注解,我们需要导入 org.springframework.web.bind.annotation.RequestMapping 包。
  • @ModelAttribute,用于将方法参数或方法返回值绑定到命名模型属性。我们需要导入 org.springframework.web.bind.annotation.ModelAttribute 包。
  • @Valid,用于标记验证级联的属性、方法参数或方法返回类型。

'viewPage' 方法返回 'info' 表单模板。它包括“信息”模型属性,以便模板可以将表单属性与“信息”对象相关联。 'submit' 方法接受两个参数:一个用@Valid 标记的'info' 对象来收集表单中填写的属性和一个 bindingResult 对象,以便我们可以测试和检索验证错误。在代码中,我们正在检查“结果”,如果遇到错误,我们会将用户发送回原始表单模板。在这种情况下,所有错误属性都会与消息一起显示。如果所有属性都有效,它会将浏览器重定向到摘要页面。

3) info.jsp 文件:

HTML

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>




Welcome Page


  
    

Welcome to GeeksforGeeks!!

    

Please fill in the form

                                                                                                                                                                                                                                                                                                                                                                             
Full Name:                 
Date of Birth:                 
Phone Number:                 
Email Id:                 
Card Number:                 
Submit
    
  

该页面包含一个简单的表单,其每个字段都位于表格的单独单元格中。该表格适合发布到“/提交”。它被 'info' 模型属性和 'POST' 方法 - web 控制器中的 'submit' 标记为备份。我们使用 Spring 表单的标签库来显示标签名称、输入字段和错误标签。这些错误标签在每个字段旁边是一个辅助元素,用于显示任何验证错误。最后,我们有一个提交表单的按钮。如果用户输入任何违反@Valid 约束的无效输入,它会弹回该页面并显示错误消息。如果所有用户输入都有效,则用户被路由到下一个网页,即“摘要”。

4) summary.jsp 文件:

HTML

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>




Summary page


  
    

Details submitted!

                                                                                                                                                                                                                                        
Name:${info.name}
Date of Birth:${info.birthDate}
Phone Number:${info.phNum}
Email:${info.email}
Card Number:${info.card}
  

这是JSP页面处理输入后在浏览器中显示用户输入值的结果。每个字段将显示在表格的单独单元格中。

运行应用程序:

  • 右键单击项目,运行方式-> 在服务器上运行。
  • 在 localhost 中选择服务器以运行应用程序。
  • 在浏览器中打开 URL: http://localhost:8080/app/以获取以下屏幕。
欢迎表格

欢迎表格

  • 如果我们输入了无效的输入,它将显示相同的页面,并显示如下错误信息,
输入无效

输入无效

  • 由于我们提供了无效的输入,表单被提交,但它违反了@Valid 约束,因此它反弹回同一页面,并带有我们在 bean 类中指定的相应错误消息。
  • 现在,输入有效输入以成功处理表单。
有效输入

有效输入

  • 单击提交以获取输出。
输出

输出

结论

这样,我们可以根据我们的要求使用标准验证注释在域对象中构建带有验证的 Spring MVC Web 应用程序。 Spring 还提供了一个 'Validator' 接口来为表单 bean 提供我们自己的自定义验证。