1. 转自:https://www.aliyun.com/jiaocheng/1315650.html
  1. <dependency>
  2. <groupId>org.hibernate</groupId>
  3. <artifactId>hibernate-validator</artifactId>
  4. <version>5.1.1.Final</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>javax.el</groupId>
  8. <artifactId>javax.el-api</artifactId>
  9. <version>2.2.4</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.glassfish.web</groupId>
  13. <artifactId>javax.el</artifactId>
  14. <version>2.2.4</version>
  15. </dependency>
与spring整合的配置:

  1. <!-- 配置 JSR303 Bean Validator 定义 -->
  2. <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />

实体类属性上加注解约束
  1. @NotNull(message="书籍的姓名不能为空!")
  2. public String getBookName() {
  3. return bookName;
  4. }

  1. /**
  2. * 服务端参数有效性验证
  3. * @param object 验证的实体对象
  4. * @param groups 验证组
  5. * @return 验证成功:返回true;严重失败:将错误信息添加到 flash message 中
  6. */
  7. @SuppressWarnings("rawtypes")
  8. public static void validateWithException(Validator validator, Object object, Class<?>... groups)
  9. throws ConstraintViolationException {
  10. Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);
  11. if (!constraintViolations.isEmpty()) {
  12. StringBuffer sb=new StringBuffer();
  13. for (ConstraintViolation constraintViolation : constraintViolations) {
  14. sb.append(constraintViolation.getMessage());
  15. }
  16. throw new RuntimeException(sb.toString());
  17. //throw new ConstraintViolationException(constraintViolations);
  18. }
  19. }
  20. 测试类方法:
  21. @Test
  22. public void testSaveBook(){
  23. Book book=new Book();
  24. book.setBookPrice(100);
  25. book.setBookStock(10);
  26. //        book.setBookName("norelax");
  27. validateWithException(validator, book);
  28. System.out.println(buyService.saveBook(10, null, 10));
  29. }
测试结果:
java.lang.RuntimeException: 书籍的姓名不能为空!
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:232)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:175)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:670)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
  • Bean Validation 中内置的 constraint(约束)
  • @Null   被注释的元素必须为 null
  • @NotNull    被注释的元素必须不为 null
  • @AssertTrue     被注释的元素必须为 true
  • @AssertFalse    被注释的元素必须为 false
  • @Min(value)     被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  • @Max(value)     被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  • @DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  • @DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  • @Size(max=, min=)   被注释的元素的大小必须在指定的范围内
  • @Digits (integer, fraction)     被注释的元素必须是一个数字,其值必须在可接受的范围内
  • @Past   被注释的元素必须是一个过去的日期
  • @Future     被注释的元素必须是一个将来的日期
  • @Pattern(regex=,flag=)  被注释的元素必须符合指定的正则表达式
  • Hibernate Validator 附加的 constraint
  • @NotBlank(message =)   验证字符串非null,且长度必须大于0
  • @Email  被注释的元素必须是电子邮箱地址
  • @Length(min=,max=)  被注释的字符串的大小必须在指定的范围内
  • @NotEmpty   被注释的字符串的必须非空
  • @Range(min=,max=,message=)  被注释的元素必须在合适的范围内
 
 

Hibernate Validation与Spring整合各注解的用法Demo的更多相关文章

  1. 全面解析Spring中@ModelAttribute注解的用法

    本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:全面解析Spring中@ModelAttribute注解的用法: @ModelAttribute注解用于将方法的参数或方法的返回值绑定到 ...

  2. 【Java EE 学习 53】【Spring学习第五天】【Spring整合Hibernate】【Spring整合Hibernate、Struts2】【问题:整合hibernate之后事务不能回滚】

    一.Spring整合Hibernate 1.如果一个DAO 类继承了HibernateDaoSupport,只需要在spring配置文件中注入SessionFactory就可以了:如果一个DAO类没有 ...

  3. Hibernate【与Spring整合】

    前言 前面已经学习了如何使用Spring与Struts2进行整合,本博文主要讲解如何使用Spring对Hibernate进行整合 Spring和Hibernate整合的关键点: SessionFact ...

  4. JSR303/JSR-349,hibernate validation,spring validation 之间的关系

    JSR303是一项标准,JSR-349是其的升级版本,添加了一些新特性,他们规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,他们位于javax.validation.co ...

  5. Hibernate Validation,Spring mvc 数据验证框架注解

    1.@NotNull:不能为 Null,但是可以为Empty:用在基本数据类型上. @NotNull(message="{state.notnull.valid}", groups ...

  6. Spring整合Struts2 注解版

    1.jar包 <!--spring配置--> <dependency> <groupId>org.springframework</groupId> & ...

  7. shiro和Spring整合使用注解时没有执行realm的doGetAuthorizationInfo回调方法的解决(XML配置)

    在使用Shiro框架进行项目整合时,使用注解在使用Shiro框架进行项目整合时,使用注解在使用Shiro框架进行项目整合时,使用注解@RequiresPermissions为方法提供是需要的权限,但是 ...

  8. 零基础学习java------40---------Maven(maven的概念,安装,maven在eclipse中使用),springboot(spring整合springmvc(注解),spring整合mybatis(常见的配置文件)),前端页面(bootstrap软件)

    一 maven 1. Maven的相关概念 1.1 项目开发中遇到的问题 (1)都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行? (2)为什么在我的机器上可以正常打包,而配置管理 ...

  9. Ibatis,Spring整合(注解方式注入)

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

随机推荐

  1. noi 1700 + 1756 八皇后问题 x

    1700:八皇后问题 总时间限制:  10000ms 内存限制:  65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和格式输出 ...

  2. 【bzoj1336/1337/2823】最小圆覆盖

    题目描述: 给出平面上N个点,请求出一个半径最小的圆覆盖住所有的点 输入: 第一行给出数字N,现在N行,每行两个实数x,y表示其坐标. 输出: 输出最小半径,输出保留三位小数. 样例输入: 4 1 0 ...

  3. 立神gvim

    set cursorlineset history=1700set nocompatible  "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限  set nufiletype ...

  4. 【PowerOJ1751&网络流24题】数字梯形问题(费用流)

    题意: 思路: [问题分析] 求图的最大权不相交路径及其变种,用费用最大流解决. [建模方法] 规则(1) 把梯形中每个位置抽象为两个点<i.a>,<i.b>,建立附加源S汇T ...

  5. Internet History, Technology, and Security(week6)——Technology: Transport Control Protocol(TCP)

    前言: 这周开始学习分层网络模型的第三层,传输层. Transport/Reliability: Transport Layer TCP层的目的是补偿IP层中可能出现的错误,并充分利用可用资源.由于I ...

  6. RedisTemplate访问Redis数据结构(五)——ZSet

    Redis 有序集合和无序集合一样也是string类型元素的集合,且不允许重复的成员.不同的是每个元素都会关联一个double类型的分数.有序集合的成员是唯一的,但分数(score)却可以重复.red ...

  7. [ethereum源码分析](1) dubug环境搭建

    前言 因为最近云小哥哥换了一份工作,新公司比较忙,所以一直没有更新新的博客.云小哥哥新的公司是做区块链的,最近在学习区块链相关的东西(也算是乘坐上了区块链这艘大船).本博客是记录我搭建ethereum ...

  8. 常用的HTML标记整理

    文章CSDN地址:https://blog.csdn.net/Ght1997... 文章GitHub地址:https://github.com/ght1997012...文章segmentfault地 ...

  9. vue 使用props 实现父组件向子组件传数据

    刚自学vue不久遇到很多问题,刚好用到的分组件,所以就用到传递数据 弄了好久终于搞定了,不多说直接上代码 父组件: <template> <headers :inputName=&q ...

  10. 微信小程序 input 组件

    输入框:该组件是原生组件,使用的时候要注意相关的设置 属性: value:类型 字符串 输入框的初始内容 type:类型 字符串 input类型 属性值:text 文本输入键盘 number 数字输入 ...