博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC使用hibrenate validation进行验证
阅读量:6279 次
发布时间:2019-06-22

本文共 3795 字,大约阅读时间需要 12 分钟。

hot3.png

本文有两点需要注意:

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

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

百度云下载地址 链接: 密码: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" %>      
书名:
ISBN:

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" %>    

SUCCESS

  • 在springmvc配置文件中配置用于验证的bean
    springmvc配置文件需要两步工作,先创建bean,然后配置之
classpath:com/elin4it/ssm/config/validationMessage

然后需要在annotation-driven配置bean

  • 添加验证提示信息文件
    根据配置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
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)

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

转载于:https://my.oschina.net/u/3099393/blog/798319

你可能感兴趣的文章
rpmfusion 的国内大学 NEU 源配置
查看>>
spring jpa 配置详解
查看>>
IOE,为什么去IOE?
查看>>
java 用反射简单应用,将Object简单转换成map
查看>>
Storm中的Worker
查看>>
dangdang.ddframe.job中页面修改表达式后进行检查
查看>>
Web基础架构:负载均衡和LVS
查看>>
Linux下c/c++相对路径动态库的生成与使用
查看>>
SHELL实现跳板机,只允许用户执行少量允许的命令
查看>>
SpringBoot 整合Redis
查看>>
2014上半年大片早知道
查看>>
Android 6.0指纹识别App开发案例
查看>>
正文提取算法
查看>>
轻松学PHP
查看>>
Linux中的网络监控命令
查看>>
this的用法
查看>>
windows下安装redis
查看>>
CentOS7 yum 安装git
查看>>
启动日志中频繁出现以下信息
查看>>
httpd – 对Apache的DFOREGROUND感到困惑
查看>>