日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java Bean验证基础

發布時間:2023/12/3 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Bean验证基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章總結了一些簡單易用的示例,這些示例說明了您想使用Java Beans Validation API(JSR 349,JSR 303)進行的最常見操作。 記住,Beans Validation獨立于Java EE。 盡管它是作為Java EE兼容服務器的一部分內置的,但該API也可以在Java SE應用程序中輕松使用。 所有這些示例都使用Java SE。

要求

我使用以下主要技術完成了本文的所有工作。 您可能可以使用不同的技術或版本來做相同的事情,但不能保證。

  • Java 1.8.0_65_x64
  • NetBeans 8.2
  • Maven 3.0.5(與NetBeans捆綁在一起)
<dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version> </dependency> <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.1.2.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> <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope> </dependency>

下載

訪問我的GitHub頁面https://github.com/mjremijan以查看我所有的開源項目。 這篇文章的代碼位于: https : //github.com/mjremijan/thoth-beanvalidation

基本

此示例顯示了使用內置的標準約束和內置的標準驗證器進行Bean驗證的基礎。

清單1.1 –驗證的Bean

package org.thoth.beanvalidation.basics;import javax.validation.constraints.NotNull;public class Widget {@NotNullprotected String name;public String getName() {return name;}public void setName(String name) {this.name = name;} }

清單1.2 –如何驗證

package org.thoth.beanvalidation.basics;import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import org.junit.Assert; import org.junit.Before; import org.junit.Test;public class WidgetTest {protected Validator validator;@Beforepublic void before() {validator = Validation.buildDefaultValidatorFactory().getValidator();}@Testpublic void violations_size() {// setupWidget w = new Widget();// actionSet<ConstraintViolation<Widget>> violations= validator.validate(w);// assertAssert.assertEquals(1, violations.size());}@Testpublic void violation_message() {// setupWidget w = new Widget();// actionSet<ConstraintViolation<Widget>> violations= validator.validate(w);// assertConstraintViolation<Widget> v= violations.stream().findFirst().get();Assert.assertEquals("may not be null", v.getMessage());}@Testpublic void violation_messageTemplate() {// setupWidget w = new Widget();// actionSet<ConstraintViolation<Widget>> violations= validator.validate(w);// assertConstraintViolation<Widget> v= violations.stream().findFirst().get();Assert.assertEquals("{javax.validation.constraints.NotNull.message}", v.getMessageTemplate());}@Testpublic void violation_propertyPath() {// setupWidget w = new Widget();// actionSet<ConstraintViolation<Widget>> violations= validator.validate(w);// assertConstraintViolation<Widget> v= violations.stream().findFirst().get();Assert.assertEquals("name", v.getPropertyPath().toString());} }

自定義消息模板

本示例說明了如何使用自定義錯誤消息而不是使用內置標準錯誤消息來定制內置標準約束。

清單2.1 – ValidationMessages.properties

Candy.name.NotNull=A candy name is required.

清單2.2 –驗證的Bean

package org.thoth.beanvalidation.custommessage;import javax.validation.constraints.NotNull;public class Candy {@NotNull(message = "{Candy.name.NotNull}")protected String name;public String getName() {return name;}public void setName(String name) {this.name = name;} }

清單2.3 –如何驗證

package org.thoth.beanvalidation.custommessage;import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test;public class CandyTest {protected static Validator validator;@BeforeClasspublic static void before() {validator = Validation.buildDefaultValidatorFactory().getValidator();}@Testpublic void notnull_violation_message() {// setupCandy candy = new Candy();// actionSet<ConstraintViolation<Candy>> violations= validator.validate(candy);// assertConstraintViolation<Candy> v= violations.stream().findFirst().get();Assert.assertEquals("A candy name is required.", v.getMessage());}@Testpublic void notnull_violation_messageTemplate() {// setupCandy candy = new Candy();// actionSet<ConstraintViolation<Candy>> violations= validator.validate(candy);// assertConstraintViolation<Candy> v= violations.stream().findFirst().get();Assert.assertEquals("{Candy.name.NotNull}", v.getMessageTemplate());} }

具有可變替換的自定義消息模板

此示例說明如何使用自定義錯誤消息配置內置的標準約束,該消息中包含變量值,該變量值在運行時由Bean驗證替換。 可以替換的變量示例包括已驗證的實際值以及@Size約束的min和max屬性。

清單3.1 – ValidationMessages.properties

Candy.name.Size.message=The candy name "${validatedValue}" is invalid. It must be between {min} and {max} characters long

清單3.2 –驗證的Bean

package org.thoth.beanvalidation.variablereplacement;import javax.validation.constraints.Size;public class Candy {private String name;@Size(message = "{Candy.name.Size.message}", min=5, max=10)public String getName() {return name;}public void setName(String name) {this.name = name;} }

清單3.3 –如何驗證

package org.thoth.beanvalidation.variablereplacement;import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.thoth.beanvalidation.variablereplacement.Candy;public class CandyTest {protected static Validator validator;@BeforeClasspublic static void before() {validator = Validation.buildDefaultValidatorFactory().getValidator();}@Testpublic void does_the_constraint_have_the_correct_messageTemplate() {// setupCandy candy = new Candy();candy.setName("");// actionSet<ConstraintViolation<Candy>> violations= validator.validate(candy);// assertConstraintViolation<Candy> v= violations.stream().findFirst().get();Assert.assertEquals("{Candy.name.Size.message}", v.getMessageTemplate());}@Testpublic void is_the_message_correct_if_size_is_too_small() {// setupCandy candy = new Candy();candy.setName("foo");// actionSet<ConstraintViolation<Candy>> violations= validator.validate(candy);// assertConstraintViolation<Candy> v= violations.stream().findFirst().get();Assert.assertEquals("The candy name \"foo\" is invalid. It must be between 5 and 10 characters long", v.getMessage());}@Testpublic void is_the_message_correct_if_size_is_too_big() {// setupCandy candy = new Candy();candy.setName("123456789|1");// actionSet<ConstraintViolation<Candy>> violations= validator.validate(candy);// assertConstraintViolation<Candy> v= violations.stream().findFirst().get();Assert.assertEquals("The candy name \"123456789|1\" is invalid. It must be between 5 and 10 characters long", v.getMessage());} }

自定義屬性驗證器

本示例說明如何為類的屬性創建您自己的約束和您自己的驗證器。

清單4.1 – ValidationMessages.properties

org.thoth.beanvalidation.propertyvalidator.Excludes.message=The value "${validatedValue}" is one of {value} which is forbidden.

清單4.2 –約束注釋

package org.thoth.beanvalidation.propertyvalidator;import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.validation.Constraint;@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = {ExcludesValidator.class}) @Documented public @interface Excludes {String message() default "{org.thoth.beanvalidation.propertyvalidator.Excludes.message}";Class[] groups() default {};Class[] payload() default {};String[] value() default {}; }

清單4.3 –約束驗證器

package org.thoth.beanvalidation.propertyvalidator;import java.util.Arrays; import java.util.List; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext;public class ExcludesValidatorimplements ConstraintValidator< Excludes, String> {private List<String> excludeTheseValues;@Overridepublic void initialize(Excludes arg) {String[] strarr = arg.value();if (strarr == null) {strarr = new String[]{};}excludeTheseValues = Arrays.asList(strarr);}@Overridepublic boolean isValid(String value, ConstraintValidatorContext cvc) {if (excludeTheseValues.contains(value)) {return false;} else {return true;}} }

清單4.4 –驗證的Bean

package org.thoth.beanvalidation.propertyvalidator;public class Candy {private String name;public Candy(String name) {this.name = name;}@Excludes({"foo", "bar", "shrubbery"})public String getName() {return name;} }

清單4.5 –如何驗證

package org.thoth.beanvalidation.propertyvalidator;import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import static org.junit.Assert.assertEquals; import org.junit.BeforeClass; import org.junit.Test;public class CandyTest {protected static Validator validator;@BeforeClasspublic static void before() {validator = Validation.buildDefaultValidatorFactory().getValidator();}@Testpublic void a_non_excludeded_name_should_not_give_you_a_constraint_violation() {// setupCandy candy = new Candy("hershey");// actionSet<ConstraintViolation<Candy>> violations= validator.validate(candy);// assertassertEquals(0, violations.size());}@Testpublic void do_you_get_a_constraint_violation_if_you_use_excluded_name_foo() {// setupCandy candy = new Candy("foo");// actionConstraintViolation<Candy> violation= validator.validate(candy).iterator().next();// assertassertEquals("{org.thoth.beanvalidation.propertyvalidator.Excludes.message}", violation.getMessageTemplate());assertEquals("The value \"foo\" is one of [foo, bar, shrubbery] which is forbidden.", violation.getMessage());}@Testpublic void do_you_get_a_constraint_violation_if_you_use_excluded_name_bar() {// setupCandy candy = new Candy("bar");// actionConstraintViolation<Candy> violation= validator.validate(candy).iterator().next();// assertassertEquals("{org.thoth.beanvalidation.propertyvalidator.Excludes.message}", violation.getMessageTemplate());assertEquals("The value \"bar\" is one of [foo, bar, shrubbery] which is forbidden.", violation.getMessage());}@Testpublic void do_you_get_a_constraint_violation_if_you_use_excluded_name_shrubbery() {// setupCandy candy = new Candy("shrubbery");// actionConstraintViolation<Candy> violation= validator.validate(candy).iterator().next();// assertassertEquals("{org.thoth.beanvalidation.propertyvalidator.Excludes.message}", violation.getMessageTemplate());assertEquals("The value \"shrubbery\" is one of [foo, bar, shrubbery] which is forbidden.", violation.getMessage());} }

自定義類驗證器

本示例說明如何創建適用于整個的約束和驗證器。

清單5.1 – ValidationMessages.properties

org.thoth.beanvalidation.classvalidator.IdentificationExists.message=At least one of social security number, drivers license number, or passport number must exist.

清單5.2 –約束注釋

package org.thoth.beanvalidation.classvalidator;import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload;@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = {IdentificationExistsValidator.class}) @Documented public @interface IdentificationExists {String message() default "{org.thoth.beanvalidation.classvalidator.IdentificationExists.message}";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {}; }

清單5.3 –約束驗證器

package org.thoth.beanvalidation.classvalidator;import java.util.Objects; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext;public class IdentificationExistsValidator implements ConstraintValidator<IdentificationExists, Identification> {@Overridepublic void initialize(IdentificationExists a) {}@Overridepublic boolean isValid(Identification t, ConstraintValidatorContext cvc) {boolean invalid =Objects.equals(t.getDriversLicenseNumber(), null)&&Objects.equals(t.getPassportNumber(), null)&&Objects.equals(t.getSocialSecurityNumber(), null);return !invalid;} }

清單5.4 –驗證的Bean

package org.thoth.beanvalidation.classvalidator;@IdentificationExists public class Identification {protected String socialSecurityNumber;protected String driversLicenseNumber;protected String passportNumber;public String getSocialSecurityNumber() {return socialSecurityNumber;}public void setSocialSecurityNumber(String socialSecurityNumber) {this.socialSecurityNumber = socialSecurityNumber;}public String getDriversLicenseNumber() {return driversLicenseNumber;}public void setDriversLicenseNumber(String driversLicenseNumber) {this.driversLicenseNumber = driversLicenseNumber;}public String getPassportNumber() {return passportNumber;}public void setPassportNumber(String passportNumber) {this.passportNumber = passportNumber;} }

清單5.5 –如何驗證

package org.thoth.beanvalidation.classvalidator;import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import org.junit.Assert; import org.junit.Before; import org.junit.Test;public class IdentificationTest {protected Validator validator;@Beforepublic void before() {validator = Validation.buildDefaultValidatorFactory().getValidator();}@Testpublic void violation_if_all_are_missing() {// setupIdentification id = new Identification();// actionSet<ConstraintViolation<Identification>> violations= validator.validate(id);// assertConstraintViolation<Identification> v= violations.stream().findFirst().get();Assert.assertEquals("At least one of social security number, drivers license number, or passport number must exist.", v.getMessage());}@Testpublic void no_violation_if_social_security_number_exists() {// setupIdentification id = new Identification();id.setSocialSecurityNumber("a");// actionSet<ConstraintViolation<Identification>> violations= validator.validate(id);// assertAssert.assertEquals(0, violations.size());}@Testpublic void no_violation_if_drivers_license_number_exists() {// setupIdentification id = new Identification();id.setDriversLicenseNumber("a");// actionSet<ConstraintViolation<Identification>> violations= validator.validate(id);// assertAssert.assertEquals(0, violations.size());}@Testpublic void no_violation_if_passport_number_exists() {// setupIdentification id = new Identification();id.setPassportNumber("a");// actionSet<ConstraintViolation<Identification>> violations= validator.validate(id);// assertAssert.assertEquals(0, violations.size());} }

組序列(短路)

本示例說明了在進行驗證時如何使用@GroupSequence作為短路。 這意味著,如果第一輪驗證未通過,則驗證“短路”,并且不會執行第二輪驗證。

默認情況下,所有bean驗證約束都放入“默認”組序列中。 但是,通過將@GroupSequence放在類上(如下所示),僅針對該類重新定義“默認”組序列。 在下面的類上使用@GroupSequence ,其基本功能是在bean驗證期間,第一個操作是驗證該類中未專門分配組的所有約束。 首先是@NotNull約束。 如果所有這些都OK,那么第二個操作是驗證Second.class組中的所有約束。 那就是@Size約束。 如果所有這些都OK,那么第三Third.class操作將驗證Third.class組中的所有約束。 那就是@Pattern約束。 如果某個小組在任何時候都無法通過驗證,則驗證將“短路”,并且驗證不再進行。

清單6.1 –驗證的Bean

package org.thoth.beanvalidation.groupsequence;import javax.validation.GroupSequence; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size;@GroupSequence({Candy.class, Candy.Second.class, Candy.Third.class}) public class Candy {protected interface Second {}protected interface Third {}private String name;@NotNull()@Size(min=4, max=10, groups = Second.class )@Pattern(regexp = "[a-z]", groups = Third.class)public String getName() {return name;}public void setName(String name) {this.name = name;} }

清單6.2 –如何驗證

package org.thoth.beanvalidation.groupsequence;import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test;public class CandyTest {private Validator validator;@Beforepublic void before() {validator = Validation.buildDefaultValidatorFactory().getValidator();}@Testpublic void short_circuits_first_if_null() {// setupCandy w = new Candy();// actionSet<ConstraintViolation<Candy>> violations//= validator.validate(w, CheckGroupSequence.class);= validator.validate(w);// assertassertEquals(1, violations.size());assertEquals("may not be null", violations.iterator().next().getMessage());}@Testpublic void short_circut_if_size_is_in_violation() {// setupCandy w = new Candy();w.setName("foo");// actionSet<ConstraintViolation<Candy>> violations= validator.validate(w);// assertassertEquals(1, violations.size());assertEquals("size must be between 4 and 10", violations.iterator().next().getMessage());}@Testpublic void short_circuit_if_pattern_is_in_violation() {// setupCandy w = new Candy();w.setName("SHRUBBERY");// actionSet<ConstraintViolation<Candy>> violations= validator.validate(w);// assertassertEquals(1, violations.size());assertEquals("must match \"[a-z]\"", violations.iterator().next().getMessage());} }

摘要

Bean驗證是一種功能強大的API,尤其是因為它可以在Java EE服務器或獨立的Java SE應用程序中使用。 這只是Bean驗證API基礎知識的簡短摘要,但是通常它足以涵蓋開發人員有關如何使用它的大多數問題。

翻譯自: https://www.javacodegeeks.com/2017/07/java-bean-validation-basics.html

總結

以上是生活随笔為你收集整理的Java Bean验证基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 影音先锋成人在线 | 最新免费av网站 | 东方欧美色图 | 国产精品无码久久av | 天天想你在线观看完整版电影免费 | 亚洲国产影院 | 99re6在线精品视频免费播放 | 毛片成人网 | 日本少妇xxxx软件 | 久久超碰av | 岛国大片在线 | 日韩午夜在线观看 | 麻豆网站在线免费观看 | 久色福利 | 亚洲国产欧美在线人成 | 欧美一级大片 | 亚洲欧美成人一区二区 | 老熟妇仑乱一区二区av | 男女无套免费视频网站动漫 | 欧美三级在线播放 | 老色批网站 | 亚洲国产精品va在线看黑人 | 天天爱天天操 | 成人tv| 超碰在线一区 | 伊人成人在线视频 | 天海翼视频在线观看 | 午夜专区 | 午夜精品视频一区二区三区在线看 | 天天人人综合 | 在线亚洲精品 | 91精品人妻一区二区三区蜜桃2 | 欧美人体视频一区二区三区 | 国产主播精品在线 | 美女的诞生免费观看在线高清 | 播金莲一级淫片aaaaaaa | 激情偷拍| av在线大全 | 国产精品视频麻豆 | 欧美日韩偷拍视频 | www.国产成人 | 暖暖日本在线 | 精品一区李梓熙捆绑 | 少妇喷潮明星 | 99国产精品久久久久久久成人热 | 日韩中文字幕在线观看视频 | 粗大挺进潘金莲身体在线播放 | 青青草手机视频 | 亚洲精品视频一区二区 | 日本中文一区 | 中文字幕在线观看视频一区二区 | 日本不卡一二三区 | 欧美成人精品在线视频 | 内射后入在线观看一区 | 国产精品免费电影 | 探花视频在线版播放免费观看 | 97成人精品| 精品成人免费一区二区在线播放 | 日本理论片 | 色哟哟免费观看 | 欧美在线www | 黑人精品xxx一区一二区 | 在线免费观看一级片 | 亚洲中文字幕久久无码 | 麻豆视频免费在线 | 日本亚洲色大成网站www久久 | 久久爱影视i| 秋霞影院av | 伊人视频| 青青久久av | 国产无人区码熟妇毛片多 | 国模小黎自慰gogo人体 | 亚洲最新在线 | 日韩系列在线 | 火影忍者羞羞漫画 | 日韩在线视频免费播放 | 久久爱伊人| 久久成人18免费观看 | 秋霞av一区二区三区 | 亚洲精品乱码久久久久久蜜桃不卡 | 日韩激情网址 | 日本妇乱大交xxxxx | 日韩av在线第一页 | 被警察猛c猛男男男 | a天堂中文字幕 | 在线观看国产三级 | 日本一区二区三区在线观看视频 | 欧美黑人性xxx | 天堂在线观看免费视频 | 免费人成 | av免费精品 | 一区二区三区观看 | 欧美精品18videosex性欧美 | 韩国伦理在线视频 | 亚洲一区在线观看视频 | 91成人在线观看喷潮动漫 | 一区二区三区免费观看视频 | www.av麻豆| 韩国av一区 |