使用Spring注入Hibernate验证框架

目录
  • Spring注入Hibernate验证框架
    • Spring配置文件
    • Hibernate内置的验证约束注解如下表所示
  • springmvc使用Hibernate的校验框架validation
    • 一、Hibernate中的validator需要的jar包
    • 二、配置校验器
    • 三、校验器注册到处理器适配器中
    • 四、在pojo中添加校验规则
    • 五、controller测试
    • 分组校验:
      • 定义多个校验分组,分组中定义有些规则
      • 在pojo中写出每一个被校验的字段属于哪一个分组
      • 在controller里使用分组校验

Spring注入Hibernate验证框架

Spring配置文件

<!-- Enables the Spring MVC @Controller programming model -->
 <mvc:annotation-driven validator="validator" />

 <!-- 配置数据校验 -->
 <bean id="messageSource"
  class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:messages"/>
        <property name="fileEncodings" value="utf-8"/>
        <property name="cacheSeconds" value="10"/>
 </bean>
 <bean id="validator"
  class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass"
   value="org.hibernate.validator.HibernateValidator"/>
  <property name="validationMessageSource" ref="messageSource"/>
 </bean>

Hibernate内置的验证约束注解如下表所示

(摘自hibernate validator reference):


验证注解


验证的数据类型


说明


@AssertFalse


Boolean,boolean


验证注解的元素值是false


@AssertTrue


Boolean,boolean


验证注解的元素值是true


@NotNull


任意类型


验证注解的元素值不是null


@Null


任意类型


验证注解的元素值是null


@Min(value=值)


BigDecimal,BigInteger, byte,

short, int, long,等任何Number或CharSequence(存储的是数字)子类型


验证注解的元素值大于等于@Min指定的value值


@Max(value=值)


和@Min要求一样


验证注解的元素值小于等于@Max指定的value值


@DecimalMin(value=值)


和@Min要求一样


验证注解的元素值大于等于@ DecimalMin指定的value值


@DecimalMax(value=值)


和@Min要求一样


验证注解的元素值小于等于@ DecimalMax指定的value值


@Digits(integer=整数位数, fraction=小数位数)


和@Min要求一样


验证注解的元素值的整数位数和小数位数上限


@Size(min=下限, max=上限)


字符串、Collection、Map、数组等


验证注解的元素值的在min和max(包含)指定区间之内,如字符长度、集合大小


@Past


java.util.Date,

java.util.Calendar;

Joda Time类库的日期类型


验证注解的元素值(日期类型)比当前时间早


@Future


与@Past要求一样


验证注解的元素值(日期类型)比当前时间晚


@NotBlank


CharSequence子类型


验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的首位空格


@Length(min=下限, max=上限)


CharSequence子类型


验证注解的元素值长度在min和max区间内


@NotEmpty


CharSequence子类型、Collection、Map、数组


验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)


@Range(min=最小值, max=最大值)


BigDecimal,BigInteger,CharSequence, byte, short, int, long等原子类型和包装类型


验证注解的元素值在最小值和最大值之间


@Email(regexp=正则表达式,

flag=标志的模式)


CharSequence子类型(如String)


验证注解的元素值是Email,也可以通过regexp和flag指定自定义的email格式


@Pattern(regexp=正则表达式,

flag=标志的模式)


String,任何CharSequence的子类型


验证注解的元素值与指定的正则表达式匹配


@Valid


任何非原子类型


指定递归验证关联的对象;

如用户对象中有个地址对象属性,如果想在验证用户对象时一起验证地址对象的话,在地址对象上加@Valid注解即可级联验证

springmvc使用Hibernate的校验框架validation

一、Hibernate中的validator需要的jar包

  • hibernate-validator-4.3.1.Final.jar
  • jboss-logging-3.1.0.GA.jar
  • validation-api-1.1.0.Final.jar

二、配置校验器

<!-- 校验器 -->
    <bean id="validator"
        class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!-- 校验器-->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
        <!-- 指定校验使用的资源文件,如果不指定则默认使用classpath下的ValidationMessages.properties -->
        <property name="validationMessageSource" ref="messageSource" />
    </bean>
    <!-- 校验错误信息配置文件 -->
    <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <!-- 资源文件名-->
        <property name="basenames">
            <list>
            <value>classpath:CustomValidationMessages</value>
            </list>
        </property>
        <!-- 资源文件编码格式 -->
        <property name="fileEncodings" value="utf-8" />
        <!-- 对资源文件内容缓存时间,单位秒 -->
        <property name="cacheSeconds" value="120" />
    </bean>

三、校验器注册到处理器适配器中

<mvc:annotation-driven validator="validator"></mvc:annotation-driven>     

四、在pojo中添加校验规则

package acm.user.po;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class User {
    private Integer id;
    //校验名字1到30个字符中间
    //message是提示校验出错信息
    @Size(min=1, max=30, message="{user.name.length.error}")
    private String name;
    //非空校验
    @NotNull(message="{user.num.noNull}")
    private String num;
    private String sex;
    private String tel;
            .
            .
            .
            .
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
}

配置文件中的代码

user.name.length.error=请输入1到30个字符的名字
user.num.noNull=请输入商品的生产日期

五、controller测试

@RequestMapping(value = "updateUser")
public String updateUser(@Validated User user, BindingResult bindingResult){
    List<ObjectError> allErrors = bindingResult.getAllErrors();
    //获得错误信息
    for(ObjectError e : allErrors){
        //输出错误信息
        System.out.println(e.getDefaultMessage());
    }
    try{
        int count = userService.updateUser(user);
    } catch(Exception e){
        e.printStackTrace();
    }
    return "message";
} 

分组校验:

定义多个校验分组,分组中定义有些规则

每个controller方法中定义不同的校验分组

定义一个接口,里面可以不写东西,用来装一个分组

在pojo中写出每一个被校验的字段属于哪一个分组

//校验名字1到30个字符中间
//message是提示校验出错信息
//标识此校验属于哪个分组,group也可属于多个分组
@Size(min=1, max=30, message="{user.name.length.error}", groups={Validation1.class})
private String name;

在controller里使用分组校验

@Validated中的参数指向那个检验分组
@RequestMapping(value = "updateUser")
public String updateUser(@Validated(value={Validation1.class}) User user, BindingResult bindingResult){
    if(bindingResult.hasErrors()){
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        //获得错误信
       for(ObjectError e : allErrors){
            //输出错误信息
            System.out.println(e.getDefaultMessage());
        }
    }
    try{
        int count = userService.updateUser(user);
    } catch(Exception e){
        e.printStackTrace();
    }
    return "message";
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • struts+spring+hibernate三个框架的整合

    准备三个框架结合的lib包 Spring3结合Struts2的步骤如下: 1:开启Struts2结合Spring3,在struts.xml中添加如下语句: java代码: <constant name="struts.objectFactory" value="spring"/> 2:在web.xml中添加listener,如下: java代码: <listener> <listener-class> org.springfram

  • springboot使用hibernate validator校验方式

    一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗长 每次要看哪些参数验证是否完整,需要去翻阅验证逻辑代码 hibernate validator(官方文档)提供了一套比较完善.便捷的验证实现方式. spring-boot-starter-web包里面有hibernate-validator包,不需要引用hibernate validator依赖. 二.hi

  • SpringBoot整合Hibernate Validator实现参数验证功能

    在前后端分离的开发模式中,后端对前端传入的参数的校验成了必不可少的一个环节.但是在多参数的情况下,在controller层加上参数验证,会显得特别臃肿,并且会有许多的重复代码.这里可以引用Hibernate Validator来解决这个问题,直接在实体类进行参数校验,验证失败直接返回错误信息给前端,减少controller层的代码量. 一.xml引入Hibernate Validator <!-- 验证器 --> <dependency> <groupId>org.hi

  • SpringBoot 使用hibernate validator校验

    本文将全面的介绍如何使用 validator 进行数据校验 本文源码: https://gitee.com/yintianwen7/taven-springboot-learning/tree/master/springboot-validate 准备工作 我们只需要引入 spring-boot-starter-web 包即可使用 1.常用注解 常用注解 2.简单的实体校验 public class CardDTO { @NotBlank private String cardId; @Size

  • 使用Spring注入Hibernate验证框架

    目录 Spring注入Hibernate验证框架 Spring配置文件 Hibernate内置的验证约束注解如下表所示 springmvc使用Hibernate的校验框架validation 一.Hibernate中的validator需要的jar包 二.配置校验器 三.校验器注册到处理器适配器中 四.在pojo中添加校验规则 五.controller测试 分组校验: 定义多个校验分组,分组中定义有些规则 在pojo中写出每一个被校验的字段属于哪一个分组 在controller里使用分组校验 S

  • Spring 使用Validation 验证框架的问题详解

    一.介绍 Spring Validation 验证框架对参数的验证机制提供了@Validated (Spring's JSR-303 规范,是标准 JSR-303 的一个变种),javax 提供了@Valid(标准 JSR-303 规范),配合 BindingResult 可以直接提供参数验证结果.其中对于字段的特定验证注解,比如 @NotNull. 两者在检验 Controller 的入参是否符合规范时,使用@Validated 或者 @Valid 在基本验证功能上没有太多区别.但是在分组.注

  • Java框架篇:Spring+SpringMVC+hibernate整合开发

    前言: 最近没什么事做,搭个框架写成博客记录下来,拉通一下之前所学知识. 话不多说,我们直接步入正题. 准备工作: 1/安装并配置java运行环境 2/数据库的安装配置(Mysql) 3/安装并配置服务器(Tomcat) 4/Maven 5/ IntelliJIDEA的安装配置(本人使用的主要软件是IntelliJIDEA,没用eclipse什么的) 6/ 使用IntelliJIDEA创建一个web app项目. 貌似就这些了吧 导包 不同于以往的导包,由于我们创建的是maven的webapp项

  • 详解JAVAEE——SSH三大框架整合(spring+struts2+hibernate)

    一.整合原理 二.导包(41个) 1.hibernate (1)hibernate/lib/required (2)hibernate/lib/jpa | java persist api java的持久化规范(接口) (3)数据库驱动 2.struts2 (1)struts-blank.war/WEB-INF/lib/* 注意:javassist-3.18.1-GA.jar包与hibernate中的重复(只保留高版本即可) (2)struts整合spring插件包 注意:这个包一旦导入,那么s

  • Spring MVC Annotation验证的方法

    简介说明 使用Spring MVC的Annotation验证可以直接对view model的简单数据验证,注意,这里是简单的,如果model的数据验证需要有一些比较复杂的业务逻辑性在里头,只是使用annotation做验证是比较难的. 以下是使用Spring MVC自带的annotation验证,加上自定义的一个@Tel的annotation验证例子,此例子具有: 1.支持多语言(国际化) 2.对默认数据先进行转化,比如int.date类型如果传入空值时,会抛异常,默认给定值 先看配置: 1.w

  • Spring和Hibernate的整合操作示例

    本文实例讲述了Spring和Hibernate的整合操作.分享给大家供大家参考,具体如下: 一 web配置 <?xml version="1.0" encoding="GBK"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schem

  • 解决spring boot hibernate 懒加载的问题

    spring boot 是快速构建微服务的新框架. 对于数据访问问题可以直接使用jpa技术,但是在单元测试发现spring jpa存在hibernate懒加载问题. 但是spring-boot没有xml配置文件所以现在网络上好多的解决方案并不能适用在spring boot框架中.在遇到该问题苦苦查询后终于无意中发现了解决方案. Spring application using JPA with Hibernate, lazy-loading issue in unit test 英文不好没有细看

  • Spring Security 密码验证动态加盐的验证处理方法

    本文个人博客地址:https://www.leafage.top/posts/detail/21697I2R 最近几天在改造项目,需要将gateway整合security在一起进行认证和鉴权,之前gateway和auth是两个服务,auth是shiro写的一个,一个filter和一个配置,内容很简单,生成token,验证token,没有其他的安全检查,然后让对项目进行重构. 先是要整合gateway和shiro,然而因为gateway是webflux,而shiro-spring是webmvc,所

  • Spring Batch轻量级批处理框架实战

    目录 1 实战前的理论基础 1.1 Spring Batch是什么 1.2 Spring Batch能做什么 1.3 基础架构 1.4 核心概念和抽象 2 各个组件介绍 2.1 Job 2.2 Step 2.3 ExecutionContext 2.4 JobRepository 2.5 JobLauncher 2.6 Item Reader 2.7 Item Writer 2.8 Item Processor 3 Spring Batch实战 3.1 依赖和项目结构以及配置文件 3.2 代码和

  • Spring Boot用户注册验证的实现全过程记录

    目录 1. 概述 2. 创建User DTO Object 3. 实现一个注册Controller 4. 验证注册数据 4.1 内置的验证 4.2 自定义验证以检查电子邮件的有效性 4.3 使用自定义验证来确认密码 4.4 检查该账户是否已经存在 5. 持久化处理 6. 安全登录 6.1 自定义UserDetailsService 6.2 开启New Authentication Provider 7. 结语 1. 概述 在这篇文章中,我们将使用Spring Boot实现一个基本的邮箱注册账户以

随机推荐