SpringMVC使用hibrenate validation进行验证

本文有两点需要注意:

  1. 本文只讲述跟验证有关的代码,如果对其他springmvc不熟悉请先自行学习
  2. 本文将验证Book类中的name长度为2到10,isbn必须为13位

首先添加需要用到hibrenate的validation JAR包

百度云下载地址 链接:http://pan.baidu.com/s/1pJusKEv 密码:k6u9

用到的一个测试POJO类Book

package com.elin4it.ssm.pojo;

import org.hibernate.validator.constraints.NotEmpty;
import sun.security.util.Length;

import javax.validation.constraints.Size;

/**
 * Description: Book
 * Author: Elin Zhou
 * Create: 2015-07-03 21:43
 */
public class Book {
    private String name;
    private String isbn;

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Book{" +
                "isbn=‘" + isbn + ‘\‘‘ +
                ", name=‘" + name + ‘\‘‘ +
                ‘}‘;
    }
}

两个jsp页面,一个用来显示form,一个是成功后的显示界面

addBook.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: elin
  Date: 15-7-3
  Time: 下午3:11
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
</head>
<body>

  <form action="<%=request.getContextPath()%>/book/addBookHandle" method="post">
    书名:<input type="text" name="name"><br>
    ISBN:<input type="text" name="isbn"><br>
    <input type="submit" value="提交"><br>
  </form>
</body>
</html>

success.jsp

<%--
  Created by IntelliJ IDEA.
  User: elin
  Date: 15-7-3
  Time: 下午9:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>
</head>
<body>
<h1>SUCCESS</h1>
</body>
</html>
  • 在springmvc配置文件中配置用于验证的bean

    springmvc配置文件需要两步工作,先创建bean,然后配置之

<!--validation-->
       <bean id="validatorFactory" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
              <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
              <property name="validationMessageSource" ref="messageSource"/>
       </bean>
       <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
              <property name="basenames">
                     <list>
                            <!--验证提示信息配置文件,不需要些.properties-->
                            <value>classpath:com/elin4it/ssm/config/validationMessage</value>
                     </list>
              </property>
              <!--默认编码-->
              <property name="defaultEncoding" value="utf-8"/>
              <!--缓存时间-->
              <property name="cacheSeconds" value="120"/>
       </bean>

然后需要在annotation-driven配置bean

<mvc:annotation-driven validator="validatorFactory"></mvc:annotation-driven>
  • 添加验证提示信息文件

    根据配置bean的时候写的路径与文件名配置提示信息文件,这里只验证书名和ISBN长度

book.name.notEmpty=书名不能为空
book.isbn.size.error=ISBN必须为13位
  • 在POJO中添加验证规则

    属性的验证规则在POJO的变量定义前添加注解

    所以在POJO指定位置修改为如下

@NotEmpty(message = "{book.name.notEmpty}")
private String name;
@Size(min = 13,max = 13,message = "{book.isbn.size.error}")
private String isbn;

其中message中是在之前的提示信息文件中的定义的键名

  • 在controller中接受验证结果

    接受验证信息需要注意两点

    第一:在form提交时接收的POJO形参名前添加@Validated注解

    第二:在controller方法的形参中添加BindingResult 类型的参数

    通过调用BindingResult .hasErrors()可以得到是否有错误产生

    BindingResult.getAllErrors()得到所有的ObjectError类型的错误

    ObjectError.getDefaultMessage()得到错误的信息

controller验证方法代码如下

@RequestMapping("/addBookHandle")
public ModelAndView addBookHandel(@Validated Book book,BindingResult bindingResult){
    ModelAndView modelAndView = new ModelAndView();
    if (bindingResult.hasErrors()){
        //得到所有的错误
        List<ObjectError> errors = bindingResult.getAllErrors();
        for (ObjectError objectError:errors){
            //打印错误信息
            System.out.println(objectError.getDefaultMessage());
        }

        modelAndView.addObject(book);
        //如果产生错误则跳转的原页面
        modelAndView.setViewName("book/addBook");
    }else{
        modelAndView.setViewName("success");
    }
    return modelAndView;
}

有时候,要验证的属性不是一成不变的,有时候只需要验证书名,有时候只需要验证ISBN,所以需要对验证规则进行分组。

根据要分的组数,定义几个java类,不需要继承类或实现接口,类中也不需要任何内容

比如现在创建ValidateType1和ValidateType2

然后在POJO类中定义规则的时候定义其group属性,例如

@NotEmpty(message = "{book.name.notEmpty}",groups = ValidationType1.class)
private String name;
@Size(min = 13,max = 13,message = "{book.isbn.size.error}",groups = ValidationType2.class)
private String isbn;

然后在对应的controller方法的@Validated注解中添加需要执行的验证规则,如

public ModelAndView addUserHandle(@Validated(ValidationType1.class) User user,BindingResult bindingResult)

那么在这个方法中,只会对书名进行验证了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 07:11:58

SpringMVC使用hibrenate validation进行验证的相关文章

SpringMVC介绍之Validation

对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证.SpringMVC自身对数据在服务端的校验有一个比较好的支持,它能将我们提交到服务端的数据按照我们事先的约定进行数据有效性验证,对于不合格的数据信息SpringMVC会把它保存在错误对象中,这些错误信息我们也可以通过SpringMVC提供的标签在前端JSP页面上进行展示. 使用Validator接口进行验证 在SpringMVC中提供了一个Validator接口,我们可以

jQuery Validation让验证变得如此容易(二)

上一个例子我们是统一引用jquery.validate.js这样所有必填字段的提示信息都将是This field is required. 现在要改成动态提示,比如姓名如果为空则提示姓名不能为空,密码如果为空则提示密码不能为空. 这次我们将校验规则写在代码里 首先还是先引入文件 <script src="js/jquery-1.8.0.min.js" type="text/javascript"></script> <script sr

Spring框架整合Struts2使用Validation框架验证表单用户输入数据的详细教程

原创整理不易,转载请注明出处:Spring框架整合Struts2使用Validation框架验证表单用户输入数据的详细教程 代码下载地址:http://www.zuidaima.com/share/1778685765291008.htm 在<Struts2教程4:使用validate方法验证数据>中曾讲到使用validate方法来验证客户端提交的数据,但如果使用validate方法就会将验证代码和正常的逻辑代码混在一起,但这样做并不利于代码维护,而且也很难将过些代码用于其他程序的验证.在St

jQuery Validation让验证变得如此容易(三)

以下代码进行对jQuery Validation的简单演示包括必填项.字符长度,格式验证 一.引入文件 <script src="js/jquery-1.8.0.min.js" type="text/javascript"></script> <script src="js/jquery.validate.js" type="text/javascript"></script>

SpringMVC(六)数据验证

在系列SpringMVC(四)数据绑定-1.SpringMVC(五)数据绑定-2中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 -> 数据验证. 这里我们采用Hibernate-validator来进行验证,Hibernate-validator实现了JSR-303验证框架支持注解风格的验证.首先我们要到http://hibernate.org/validator/下载需要的jar包,这里以4.3.1.Final作为演示,解压后把hibernat

SpringMVC集成Bean Validation 1.1

1.集成Bean Validation 1.1到SpringMVC 1.1.项目搭建 所需的jar包: hibernate-validator-5.2.4.Final.jar validation-api-1.0.0.GA.jar slf4j-api-1.7.5.jar 首先添加hibernate validator 5依赖: Java代码   <dependency> <groupId>org.hibernate</groupId> <artifactId>

springMVC框架中的ajax验证

当然,你在使用springMVC之前需要进行环境的配置,这里就不讲了,直接上代码. 在使用springMVC之前,我在使用ajax验证的时候,需要用到一个解析json的jar包:将数据通过ajax拿到后台servlet,再通过jsonObject对象进行来像前台进行数据的传递.像下面这样: JSONObject j = new JSONObject(); request.setCharacterEncoding("utf-8"); response.setCharacterEncodi

cross validation交叉验证

交叉验证是一种检测model是否overfit的方法.最常用的cross validation是k-fold cross validation. 具体的方法是: 1.将数据平均分成k份,0,1,2,,,k-1 2.使用1~k-1份数据训练模型,然后使用第0份数据进行验证. 3.然后将第1份数据作为验证数据.进行k个循环.就完成了k-fold cross validation 这个交叉验证的方法的特点是:所有的数据都参与了验证,也都参与了训练,没有浪费数据.

springmvc表单注解简单验证

springmvc 的表单标签<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 页面上<form:input path="accountName"/><form:errors path="accountName" cssStyle="color:red"/> 页面传递的数据