English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring MVC benutzerdefinierte Validierung

Das Spring MVC-Framework ermöglicht es uns, benutzerdefinierte Validierung durchzuführen. In diesem Fall deklarieren wir unsere eigenen Annotionen. Wir können Validierung gemäß unserer Geschäftslogik durchführen.

Spring MVC benutzerdefinierte Validierung Beispiel

In diesem Beispiel verwenden wir gleichzeitig vorgegebene und benutzerdefinierte Kommentare, um die Benutzerinput zu validieren。

1、Fügen Sie die Abhängigkeiten zu der Datei pom.xml hinzu。

pom.xml

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jasper -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jasper</artifactId>
    <version>9.0.12</version>
</dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>  
    <groupId>javax.servlet</groupId>  
    <artifactId>servlet-api</artifactId>  
    <version>3.0-alpha-1</version>  
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
 <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.13.Final</version>
</dependency>

2、创建bean类

Employee.java

package com.w3codebox;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import com.w3codebox.customvalidation.Password;
public class Employee {
    private String name;
    //Benutzerdefinierte Annotation
    @Password
    private String password;
    //Vorgedefinierte Annotation
    @Min(value=18, message="must be equal or greater than 18)
    @Max(value=45, message="must be equal or less than 45)
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }   
}

3、创建控制器类

EmployeeController.java

 package com.w3codebox;
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 EmployeeController {
    
    @RequestMapping("/hello)
    public String showForm(Model theModel) {
        
        theModel.addAttribute("emp", new Employee());
        
        return "viewpage";
    }
    
    @RequestMapping("/helloagain
    public String processForm(
            @Valid @ModelAttribute("emp") Employee emp,
            BindingResult br) {
                
        if (br.hasErrors()) {
            return "viewpage";
        }
        else {
            return "final";
        }
    }
}

4、Erstellen Sie ein Validierungsmerkmal

Password.java

package com.w3codebox.customvalidation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Constraint(validatedBy = PasswordConstraintValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Password {
    //Fehlermeldung
        public String message() default "must contain jtp";
    //represents group of constraints   
        public Class<?>[] groups() default {};
    //表示关于注解的附加信息
        public Class<? extends Payload>[] payload() default {};
}

5、创建验证器类

PasswordConstraintValidator.java

package com.w3codebox.customvalidation;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class PasswordConstraintValidator implements ConstraintValidator<Password,String> {
    public boolean isValid(String s, ConstraintValidatorContext cvc) {
        
        boolean result=s.contains("jtp");
        return result;
    }
}

6、在web.xml文件中提供控制器的条目

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SpringMVC</display-name>
   <servlet>  
    <servlet-name>spring</servlet-name>  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    <load-on-startup>1</load-on-startup>    
</servlet>  
<servlet-mapping>  
    <servlet-name>spring</servlet-name>  
    <url-pattern>/</url-pattern>  
</servlet-mapping>  
</web-app>

7、在xml文件中定义Bean

spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!-- Provide support for component scanning -->
    <context:component-scan base-package="com.w3codebox" />
    <!--Provide support for conversion, formatting and validation -->
    <mvc:annotation-driven/>
    <!-- Define Spring MVC view resolver -->
     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/></property>
        <property name="suffix" value=".jsp"></property>     
     </bean>
</beans>

8、创建请求的页面

index.jsp

<html>
<body>
<a href="hello">Click here...</a>/a>
</body>
</html>

9、创建其他视图组件

viewpage.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
    <style>
        .error {color:red}
    </style>
</head>
<body>
    <form:form action="helloagain" modelAttribute="emp">
        Benutzername: <form:inputpath="name" />     
        <br><br>
        
        Passwort (*): <form:passwordpath="password" />
        <form:errorspath="password"cssClass="error" />
        <br><br>
        
        Alter (*): <form:inputpath="age" />
        <form:errorspath="age"cssClass="error" />
        <br><br>
        <inputtype="submit"value="Submit" />
    </form:form>
</body>
</html>

final.jsp

<%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>
<!DOCTYPEhtml>
<html>
<body>
Benutzername: ${emp.name}<br><br>
Passwort: ${emp.password}<br><br>
Alter: ${emp.age}
<br><br>
</body>
</html>

Ausgabe:



Hierist dasPasswort,das wir eingeben, nicht mit der" jtp"-Sequenz.



Jetztist dasPasswort,das wir eingeben, mit der" jtp"-Sequenz.