后端——功能——校验——jsr303——hibernate_validator——《官网》阅读笔记——第一章节(Hello World示例)——待补充

  第一章节大致讲了三个部分的内容

  1. 概念 & 功能
  2. 搭建环境以及它的应用场景
  3. 演示Car的校验示例。

1、概念 & 功能

  Hibernate Validator 是 Jakarta Bean Validation的一种实现。类似于JDBC规范与各数据库驱动Jar之间的关系,类似于ES标准与JavaScript语言的关系。

  Hibernate Validator的最新版本6 是Jakarta Bean Validation 2.0的实现。

  Hibernate Validator的功能是后台校验数据。在Spring框架中也实现了后台校验功能,spring提供的校验功能没有Hibernate Validator丰富。

2、搭建环境

  搭建环境的步骤比较简单,只需要引入Jar包。

  当使用校验功能,需要引入hibernate-validator, Maven的配置如下:

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

  当在编写校验规则时,使用了EL表达式,需要引入jakarta.el,Maven的配置如下:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.el</artifactId>
    <version>3.0.3</version>
</dependency>

  当在Jakarta EE中集成HibernateValidator时,需要引入hibernate-validator-cdi,其中cdi的含义是context dependency injection,依赖注入,与Spring功能类似。Maven的配置如下:

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

  WildFly:略

  Java 9:略,因为正在实验阶段,原著:As of Hibernate Validator 6.1.2.Final, support for Java 9 and the Java Platform Module System (JPMS) is experimental。

3、Car示例

  示例的分析都写在了代码注释中。

  Car实体类

/**
 * 
 * @File Name: Car.java 
 * @Description: 车实体类,在示例中扮演着被校验的角色
 * @version 1.0
 * @since JDK 1.8
 */
public class Car {
	// 生产商
	@NotNull
	private String manufacturer;

	// 车牌号码
	@NotNull
	@Size(min = 2, max = 14)
	private String licensePlate;

	// 车座位
	@Min(2)
	private int seatCount;

	public Car(String manufacturer, String licensePlate, int seatCount) {
		this.manufacturer = manufacturer;
		this.licensePlate = licensePlate;
		this.seatCount = seatCount;
	}
}

  CarTest测试类

package ch1;

import static org.junit.Assert.assertEquals;

import java.util.Set;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;

import org.junit.BeforeClass;
import org.junit.Test;

/**
 * 
 * @File Name: Main.java
 * @Description: main方法,扮演着测试的角色
 * @version 1.0
 * @since JDK 1.8
 */
public class CarTest {
	// 校验器
	private static Validator validator;

	@BeforeClass
	public static void setUpValidator() {
		ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
		validator = factory.getValidator();
	}

	/**
	 * 
	 * @Title: manufactureIsNull
	 * @Description: 校验Car的manufacture(制造商)字段
	 */
	@Test
	public void manufactureIsNull() {
		// 创建被校验的对象
		Car car = new Car(null, "DD-AB-123", 4);
		// 校验功能,如果校验结果为失败,会返回ConstraintViolation
		Set<ConstraintViolation<Car>> constraintViolations = validator.validate(car);

		// 断言,这个是哲学的概念,只有三种结果, 真,假, 未知
		// 相等断言: 校验失败的大小为1
		assertEquals(1, constraintViolations.size());
		// 相等断言: 校验失败的提示信息为"must not be null"
		// 这个消息为校验失败的默认值
		assertEquals("must not be null", constraintViolations.iterator().next().getMessage());
	}

	/**
	 * 
	 * @Title: licensePlateTooShort @Description:校验Car的licensePlate(车牌号)
	 */
	@Test
	public void licensePlateTooShort() {
		// 步骤基本一致,第一步创建被校验的对象
		Car car = new Car("Morris", "D", 4);
		// 校验功能
		Set<ConstraintViolation<Car>> constraintViolations = validator.validate(car);

		// 断言
		assertEquals(1, constraintViolations.size());
		assertEquals("size must be between 2 and 14", constraintViolations.iterator().next().getMessage());
	}

	/**
	 * 
	 * @Title: seatCountTooLow
	 * @Description:校验Car的seatCount(车座)
	 */
	@Test
	public void seatCountTooLow() {
		// 步骤基本一致,第一步创建被校验的对象
		Car car = new Car("Morris", "DD-AB-123", 1);
		Set<ConstraintViolation<Car>> constraintViolations = validator.validate(car);
		assertEquals(1, constraintViolations.size());
		assertEquals("must be greater than or equal to 2", constraintViolations.iterator().next().getMessage());
	}
}

示例中有三个步骤:

  1. 第一步,创建实体类,编写校验规则,之后会学习到更复杂的校验规则
  2. 第二步,创建校验器,调用validator,之后会更深入理解校验的原理。
  3. 第三步,获取校验结果,之后会学习更复杂的校验结果形式。

猜你喜欢

转载自www.cnblogs.com/rain144576/p/12693182.html
今日推荐