在Java SE中使用Hibernate Bean Validator
Bean Validation主頁上指出:“ Bean Validation是Java規范,…在Java SE中運行,但集成在Java EE(6和7)中?!?這篇文章演示了如何在Java EE容器之外使用Java Bean驗證參考實現( Hibernate Validator )。 這篇文章中的示例基于Hibernate Validator 5.1.3 Final ,可從http://hibernate.org/validator/downloads下載。
“ Hibernate Validator入門 ”指出,Hibernate Validator需要統一表達語言 ( JSR 341 )和上下文和依賴項注入 ( CDI / JSR 346 )的實現。 這些規范的實現可在符合Java EE的現代容器(應用程序服務器)中使用,但是在Java SE環境中使用Hibernate Validator需要采購和使用單獨的實現。
“ Hibernate Validator入門”頁面提供了一種Maven XML,可以用來識別對Expression Language API (我正在使用Expression Language 3.0 API ), Expression Language實施 (我正在使用Expression Language Implementation 2.2.6 )的依賴性。 ,以及Hibernate Validator CDI便攜式擴展 (我正在使用Hibernate Validator便攜式擴展5.1.3 Final )。 我還使用Bean Validation API 1.1.0 Final , JBoss Logging 3.3.0 Final和ClassMate 1.2.0來構建和運行示例。
本文中演示的bean驗證示例定義了三個Java類。 Car.java是從“ Hibernate Validator入門 ”頁面上提供的示例改編而成的一類,接下來顯示其代碼清單。
汽車.java
package dustin.examples;import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size;/*** Example adapted from "Getting Started with Hibernate Validator"* (http://hibernate.org/validator/documentation/getting-started/).*/ public class Car {@NotNullprivate String manufacturer;@NotNull@Size(min = 2, max = 14)private String licensePlate;@Min(2)private int seatCount;public Car(final String manufacturer, final String licencePlate, final int seatCount){this.manufacturer = manufacturer;this.licensePlate = licencePlate;this.seatCount = seatCount;}public String getManufacturer(){return manufacturer;}public String getLicensePlate(){return licensePlate;}public int getSeatCount(){return seatCount;}@Overridepublic String toString(){return "Car{" +"manufacturer='" + manufacturer + '\'' +", licensePlate='" + licensePlate + '\'' +", seatCount=" + seatCount +'}';} }Garage.java定義了Garage.java示例中使用的另一個類, Garage.java主要是Car的多個實例的包裝。 它的主要目的是幫助說明Hibernate Bean Validator支持的遞歸驗證。
車庫.java
package dustin.examples;import javax.validation.Valid; import javax.validation.constraints.Size;import java.util.Collections; import java.util.HashSet; import java.util.Set;/*** Holds cars.*/ public class Garage {@Size(min = 1)@Validprivate final Set<Car> cars = new HashSet<>();public Garage() {}public void addCar(final Car newCar){cars.add(newCar);}public Set<Car> getCars(){return Collections.unmodifiableSet(this.cars);} }上面列出的Garage代碼使用@Valid批注指示也應驗證該類持有的Car實例(“驗證級聯”)。
本文的示例中使用的最后一個Java類是將實際執行兩個帶bean驗證注釋的類Car和Garage驗證的類。 該類的清單如下所示。
HibernateValidatorDemonstration.java
package dustin.examples;import static java.lang.System.out;import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.ValidatorFactory; import javax.validation.Validator; import java.util.Set;/*** Demonstrate use of Hibernate Validator.*/ public class HibernateValidatorDemonstration {private final Validator validator;public HibernateValidatorDemonstration(){final ValidatorFactory factory = Validation.buildDefaultValidatorFactory();validator = factory.getValidator();}public void demonstrateValidator(){final Car nullManufacturerCar = new Car(null, "ABC123", 4);final Set<ConstraintViolation<Car>> nullMfgViolations = validator.validate(nullManufacturerCar);printConstraintViolationsToStandardOutput("Null Manufacturer Example", nullMfgViolations);final Car nullLicenseCar = new Car("Honda", null, 3);final Set<ConstraintViolation<Car>> nullLicenseViolations = validator.validate(nullLicenseCar);printConstraintViolationsToStandardOutput("Null License Example", nullLicenseViolations);final Car oneSeatCar = new Car("Toyota", "123ABC", 1);final Set<ConstraintViolation<Car>> tooFewSeatsViolations = validator.validate(oneSeatCar);printConstraintViolationsToStandardOutput("Too Few Seats Example", tooFewSeatsViolations);final Car oneDigitLicenseCar = new Car("General Motors", "I", 2);final Set<ConstraintViolation<Car>> tooFewLicenseDigitsViolation = validator.validate(oneDigitLicenseCar);printConstraintViolationsToStandardOutput("Too Few License Digits Example", tooFewLicenseDigitsViolation);final Car nullManufacturerNullLicenseCar = new Car(null, null, 4);final Set<ConstraintViolation<Car>> nullMfgLicenseViolation = validator.validate(nullManufacturerNullLicenseCar);printConstraintViolationsToStandardOutput("Null Manufacturer and Null License Example", nullMfgLicenseViolation);final Garage garage = new Garage();final Set<ConstraintViolation<Garage>> noCarsInGarage = validator.validate(garage);printConstraintViolationsToStandardOutput("No Cars in Garage", noCarsInGarage);garage.addCar(oneDigitLicenseCar);garage.addCar(oneSeatCar);garage.addCar(nullManufacturerNullLicenseCar);final Set<ConstraintViolation<Garage>> messedUpCarsInGarage = validator.validate(garage);printConstraintViolationsToStandardOutput("Messed Up Cars in Garage", messedUpCarsInGarage);}private <T> void printConstraintViolationsToStandardOutput(final String title,final Set<ConstraintViolation<T>> violations){out.println(title);for (final ConstraintViolation<T> violation : violations){out.println("\t" + violation.getPropertyPath() + " " + violation.getMessage());}}public static void main(final String[] arguments){final HibernateValidatorDemonstration instance = new HibernateValidatorDemonstration();instance.demonstrateValidator();} }上面的代碼具有對javax.validation.Validator.validate(T,Class <?>)的多次調用,這些調用演示了對正在驗證其實例的類的注釋的有效性。 幾個示例驗證對象的單個驗證沖突,一個示例驗證對象的多個驗證沖突,最后一個示例演示成功的級聯沖突檢測。
HibernateValidatorDemonstration類具有main(String[])函數,可以在Java SE環境中執行該函數(假定必需的JAR位于運行時類路徑上)。 接下來顯示運行上述演示類的輸出:
Jul 19, 2015 9:30:05 PM org.hibernate.validator.internal.util.Version INFO: HV000001: Hibernate Validator 5.1.3.Final Null Manufacturer Examplemanufacturer may not be null Null License ExamplelicensePlate may not be null Too Few Seats ExampleseatCount must be greater than or equal to 2 Too Few License Digits ExamplelicensePlate size must be between 2 and 14 Null Manufacturer and Null License Examplemanufacturer may not be nulllicensePlate may not be null No Cars in Garagecars size must be between 1 and 2147483647 Messed Up Cars in Garagecars[].licensePlate size must be between 2 and 14cars[].manufacturer may not be nullcars[].licensePlate may not be nullcars[].seatCount must be greater than or equal to 2結論
這篇文章證明了Bean驗證規范的參考實現Hibernate Bean Validator可以在Java SE環境中執行。 作為演示的一部分,還討論了與Bean驗證規范和Hibernate Bean驗證器實現相關的一些基本概念。
其他資源
- Java技巧:獨立實現中的休眠驗證
- 如何將javax.validation導入我的Java SE項目?
- 使用Hibernate Validator滿足您的驗證需求
翻譯自: https://www.javacodegeeks.com/2015/07/using-hibernate-bean-validator-in-java-se.html
總結
以上是生活随笔為你收集整理的在Java SE中使用Hibernate Bean Validator的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 没有卡能取钱吗?
- 下一篇: apache.camel_Apache