Spring MVC数据校验;Validator 接口@Validated注解

版权声明:本站所提供的文章资讯、软件资源、素材源码等内容均为本作者提供、网友推荐、互联网整理而来(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考,如有侵犯您的版权,请联系我,本作者将在三个工作日内改正。 https://blog.csdn.net/weixin_42323802/article/details/84147234

声明,使用 JDK8 、spring5.0.7 、idea2018.2

Spring MVC 提供了两种数据校验的方式:

基于 Validator 接口
使用 Annotaion JSR-303 标准进行校验

基于 Validator 接口的方式需要自定义 Validator 验证器,每一条数据的验证规则需要自己手动完成;使用 Annotaion JSR-303 标准则不需要自定义验证器,通过注解的方式可以直接在实体类中添加每个属性的校验规则,这种方式更加方便,实际开发中推荐使用。
Annotaion JSR-303标准参考:
https://blog.csdn.net/weixin_42323802/article/details/84000994

基于 Validator 接口

主要步骤为:
1、自定义校验器 StudentValidation,实现 Validator 接口
2、编写Controller 、对业务逻辑判断;
3、jsp页面通过form表单的post发送请求;
子模块目录结构如下:

水电费


model实体类;

public class Student {
    private String name;
    private String password;
}
/**
 * @auther SyntacticSugar
 * @data 2018/11/16 0016下午 10:46
 *    自定义 校验器StudentValidator;
 */
public class StudentValidator implements Validator{
     @Override
    public boolean supports(Class<?> clazz) {
        return Student.class.equals(clazz);
    }
 	 @Override
    public void validate(Object target, Errors errors) {
        // TODO Auto-generated method stub
        ValidationUtils.rejectIfEmpty(errors, "name", null, "姓名不能为空"); 
        ValidationUtils.rejectIfEmpty(errors, "password", null, "密码不能为空");
    }
}

控制器 HelloHandler,业务方法 login 参数列表中的 @Validated 表示参数 student 是需要校验的对象,@BindingResult 用来存储错误信息,两者缺一不可,而且必须挨着写,中间不能有其他参数。

/**
 * @auther SyntacticSugar
 * @data 2018/11/16 0016下午 10:51
 */
@Controller
public class HelloHandler {
    @GetMapping("/login")
    public String login(Model model) {
        model.addAttribute(new Student());
        return "login";
    }
    //  校验结果  BindingResult
    @PostMapping("/login")
    public String login(@Validated Student student, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return "login";
        }
        return "success";
    }
}

springmvc-servlet.xml配置;

   <!-- 配置bean ,  开启注解扫描 controller ,配置mvc驱动 -->
    <context:component-scan base-package="com.baidu"/>
<!--  配置mvc 的视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
  <!--基于 validator配置  -->
    <mvc:annotation-driven validator="studentValidator"/>
    <bean id="studentValidator" class="com.baidu.validator.StudentValidator"/>

web.xml配置springmvc的入口、;

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <display-name>Archetype Created Web Application</display-name>
    <!-- springmvc的入口 -->
 <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  </web-app>

login.jsp页面;

<h1>学生登录</h1>
<form:form modelAttribute="student" action="login" method="post">
    学生姓名:<form:input path="name" /><form:errors path="name"/><br/>
    学生密码:<form:password path="password" /><form:errors path="password"/><br/>
    <input type="submit" value="提交"/>
</form:form>

通过地址栏发送 GET 请求访问 login 方法,绑定模型数据,然后页面跳转到 login.jsp。
http://localhost:8080/springmvc_test_upload/login
直接单击“提交”按钮,form 表单发送 POST 请求访问 login 方法,完成数据校验,并将校验结果再次返回到 login.jsp。

xianshi


Annotaion JSR-303 标准

使用 Annotation JSR-303 标准进行验证,需要导入支持这种标准的 jar 包,这里我们使用 Hibernate Validator。
主要使用@Valid绑定需校验的对象;
具体参见:
https://blog.csdn.net/weixin_42323802/article/details/84000994

pom.xml配置:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.0.8.RELEASE</version>
</dependency>
<!-- JRS-303 -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.3.Final</version>
</dependency>
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.1.1.GA</version>
 </dependency>
<!-- 解决 JDK 9 以上版本没有 JAXB API jar 的问题,JDK 9 以下版本不需要配置 -->
<dependency>
   <groupId>javax.xml.bind</groupId>
   <artifactId>jaxb-api</artifactId>
   <version>2.3.0</version>
</dependency>
<dependency>
   <groupId>com.sun.xml.bind</groupId>
   <artifactId>jaxb-impl</artifactId>
   <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>

猜你喜欢

转载自blog.csdn.net/weixin_42323802/article/details/84147234