Hibernate Validation各注解的用法Demo

  1. 依赖包

<dependency>


    <groupId>org.hibernate</groupId>    <artifactId>hibernate-validator</artifactId>
    <version>5.1.1.Final</version>
</dependency>

<dependency>
   <groupId>javax.el</groupId>
   <artifactId>javax.el-api</artifactId>
   <version>2.2.4</version>
</dependency>
<dependency>
   <groupId>org.glassfish.web</groupId>
   <artifactId>javax.el</artifactId>
   <version>2.2.4</version>
</dependency>
与spring整合的配置:
<!-- 配置 JSR303 Bean Validator 定义 -->

  <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />

实体类属性上加注解约束

@NotNull(message="书籍的姓名不能为空!")

public String getBookName() {

return bookName;

}

/**

* 服务端参数有效性验证

* @param object 验证的实体对象

* @param groups 验证组

* @return 验证成功:返回true;严重失败:将错误信息添加到 flash message 中

*/

@SuppressWarnings("rawtypes")

public static void validateWithException(Validator validator, Object object, Class<?>... groups)

throws ConstraintViolationException {

Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);

if (!constraintViolations.isEmpty()) {

StringBuffer sb=new StringBuffer();

for (ConstraintViolation constraintViolation : constraintViolations) {

sb.append(constraintViolation.getMessage());

}

throw new RuntimeException(sb.toString());

//throw new ConstraintViolationException(constraintViolations);

}

}

测试类方法:

@Test

public void testSaveBook(){

Book book=new Book();

book.setBookPrice(100);

book.setBookStock(10);

//        book.setBookName("norelax");

validateWithException(validator, book);

System.out.println(buyService.saveBook(10, null, 10));

}

测试结果:

java.lang.RuntimeException: 书籍的姓名不能为空!

at com.relax.www.tx.web.BuyControllerTest.validateWithException(BuyControllerTest.java:89)

at com.relax.www.tx.web.BuyControllerTest.testSaveBook(BuyControllerTest.java:70)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

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)

  1. Bean Validation 中内置的 constraint(约束)
  2. @Null   被注释的元素必须为 null
  3. @NotNull    被注释的元素必须不为 null
  4. @AssertTrue     被注释的元素必须为 true
  5. @AssertFalse    被注释的元素必须为 false
  6. @Min(value)     被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  7. @Max(value)     被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  8. @DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  9. @DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  10. @Size(max=, min=)   被注释的元素的大小必须在指定的范围内
  11. @Digits (integer, fraction)     被注释的元素必须是一个数字,其值必须在可接受的范围内
  12. @Past   被注释的元素必须是一个过去的日期
  13. @Future     被注释的元素必须是一个将来的日期
  14. @Pattern(regex=,flag=)  被注释的元素必须符合指定的正则表达式
  15. Hibernate Validator 附加的 constraint
  16. @NotBlank(message =)   验证字符串非null,且长度必须大于0
  17. @Email  被注释的元素必须是电子邮箱地址
  18. @Length(min=,max=)  被注释的字符串的大小必须在指定的范围内
  19. @NotEmpty   被注释的字符串的必须非空
  20. @Range(min=,max=,message=)  被注释的元素必须在合适的范围内
时间: 2024-07-28 20:07:21

Hibernate Validation各注解的用法Demo的相关文章

Hibernate Validation各注解的用法

Bean Validation 中内置的 constraint @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 true @AssertFalse 被注释的元素必须为 false @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value) 被注释的元素必须是一个数字,其

spring 数据校验之Hibernate validation

1.需要的jar包 2.springsevlet-config.xml配置 在spring3之后,任何支持JSR303的validator(如Hibernate Validator)都可以通过简单配置引入,只需要在配置xml中加入,这时validatemessage的属性文件默认为classpath下的ValidationMessages.properties: <!-- support JSR303 annotation if JSR 303 validation present on cla

Hibernate Validator验证注解说明

Hibernate Validator是JSR-303的一个实现.在FormBean里添加Hibernate Validator的注解,与定义一个校验类的做法相比.注解更加简洁.灵活. 注解说明 Bean Validation 中内置的 constraint         @Null   被注释的元素必须为 null    @NotNull    被注释的元素必须不为 null    @AssertTrue     被注释的元素必须为 true    @AssertFalse    被注释的元

Myeclipse中基于springMVC+spring+hibernate的非注解入门实例

一直做Android前端开发,想学学后台J2EE服务器开发 的知识,零基础第一步学习一个简单例子: 一, demo结构: 数据库: 二, SpingMVC框架: 拷贝相应的jar到lib纹路下: 三, 在myeclipse中添加Spring支持: 右键点击该工程,在对话框中选择"MyEclipse->Add Spring Capabilities...",添加Spring,并进行相关配置,如图4所示,采用默认配置即可.本例选用的spring3.1. 配置Hibernate 1)右

Hibernate Validation使用示例及讲解

Hibernate Validation使用示例及讲解 时间 2015-01-10 11:02:14 ITeye-博客 原文 http://wdmcygah.iteye.com/blog/2174680 主题 Java 在项目开发过程中,后台在很多场景都需要进行校验操作,比如:前台表单提交到后台,系统接口调用,数据传输等等.而且很多项目都采用MVC分层式设计,每层还有需要进行相应地校验,这样在项目较大,多人协作开发的时候,会造成大量重复校验代码,且出错率高. 针对这个问题, JCP 出台一个 J

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

JSR303是一项标准,JSR-349是其的升级版本,添加了一些新特性,他们规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,他们位于javax.validation.constraints包下,只提供规范不提供实现. hibernate validation是对这个规范的实践(不要将hibernate和数据库orm框架联系在一起),他提供了相应的实现,并增加了一些其他校验注解,如@Email,@Length,@Range等等,他们位于org.hibernate.va

spring+hibernate实体类注解详解(非原创) + cascade属性取值

@Entity //继承策略.另一个类继承本类,那么本类里的属性应用到另一个类中 @Inheritance(strategy = InheritanceType.JOINED ) @Table(name="INFOM_TESTRESULT") public class TestResult extends IdEntity{} 1 @Entity(name="EntityName") 必须 name为可选,对应数据库中一的个表 2 @Table(name="

Hibernate中的注解说明

Hibernate中注解注解比较多,常用的也就那么几个,在这里把Hibernate中的注解汇总总结一下. @Entity:将一个类声明为一个实体bean,即一个持久化POJO; @Id:声明bean的标识属性,即和表中的主键对应的属性: @Table:声明bean映射数据库中指定的表: @Column:声明bean的属性到表的列的映射,该注解还有以下属性: name:可选,属性要映射的列明,如果属性名和列名相同则可以省略: unique:可选,是否在该列上设置唯一约束,默认值为false: nu

Hibernate之Criteria的完整用法

Criteria的完整用法 QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(Example.create(s)); //s是一个Student对象 list cri.list(); 实质:创建一个模版,比如我有一个表serial有一个 giftortoy字段,我设置serial.setgifttoy("2"), 则这个表中的所有的giftortoy为2的数据都会出来