当前位置: 首页 > news >正文

成华区微信网站建设计公司加盟

成华区微信网站建,设计公司加盟,厦门工程建设招聘信息网站,北京网站建设学习首发博客地址 https://blog.zysicyj.top/ 一、声明bean约束 1. 字段级别约束 不支持静态类型字段 验证引擎直接访问实例变量#xff0c;不会调用属性的访问器 在验证字节码增强的对象时#xff0c;应适用属性级别约束#xff0c;因为字节码增库无法通过反射确定字段访问 pac… 首发博客地址 https://blog.zysicyj.top/ 一、声明bean约束 1. 字段级别约束 不支持静态类型字段 验证引擎直接访问实例变量不会调用属性的访问器 在验证字节码增强的对象时应适用属性级别约束因为字节码增库无法通过反射确定字段访问 package org.hibernate.validator.referenceguide.chapter02.fieldlevel;public class Car {    NotNull    private String manufacturer;    AssertTrue    private boolean isRegistered;    public Car(String manufacturer, boolean isRegistered) {        this.manufacturer  manufacturer;        this.isRegistered  isRegistered;    }    //getters and setters...} 2. 属性级别约束 必须注释getter而不是setter这样可以限制没有设置方法的只读属性 该级别将使用属性访问策略来访问验证的值即验证引擎通过属性访问器来访问数据 不要字段和getter都加校验这样会导致校验两次 package org.hibernate.validator.referenceguide.chapter02.propertylevel;public class Car {    private String manufacturer;    private boolean isRegistered;    public Car(String manufacturer, boolean isRegistered) {        this.manufacturer  manufacturer;        this.isRegistered  isRegistered;    }    NotNull    public String getManufacturer() {        return manufacturer;    }    public void setManufacturer(String manufacturer) {        this.manufacturer  manufacturer;    }    AssertTrue    public boolean isRegistered() {        return isRegistered;    }    public void setRegistered(boolean isRegistered) {        this.isRegistered  isRegistered;    }} 容器元素约束 3.1 Iterable 在该类型上加约束时将会校验每个元素 package org.hibernate.validator.referenceguide.chapter02.containerelement.set;import java.util.HashSet;import java.util.Set;public class Car {    private SetValidPart String parts  new HashSet();    public void addPart(String part) {        parts.add( part );    }    //...} Car car  new Car();car.addPart( Wheel );car.addPart( null );SetConstraintViolationCar constraintViolations  validator.validate( car );assertEquals( 1, constraintViolations.size() );ConstraintViolationCar constraintViolation         constraintViolations.iterator().next();assertEquals(        null is not a valid car part.,        constraintViolation.getMessage());assertEquals( parts[].iterable element,        constraintViolation.getPropertyPath().toString() ); 3.2 List 也会校验每个元素 package org.hibernate.validator.referenceguide.chapter02.containerelement.list;public class Car {    private ListValidPart String parts  new ArrayList();    public void addPart(String part) {        parts.add( part );    }    //...} Car car  new Car();car.addPart( Wheel );car.addPart( null );SetConstraintViolationCar constraintViolations  validator.validate( car );assertEquals( 1, constraintViolations.size() );ConstraintViolationCar constraintViolation         constraintViolations.iterator().next();assertEquals(        null is not a valid car part.,        constraintViolation.getMessage());assertEquals( parts[1].list element,        constraintViolation.getPropertyPath().toString() ); 3.3 Map package org.hibernate.validator.referenceguide.chapter02.containerelement.map;import java.util.HashMap;import java.util.Map;import javax.validation.constraints.NotNull;public class Car {    public enum FuelConsumption {        CITY,        HIGHWAY    }    private MapNotNull FuelConsumption, MaxAllowedFuelConsumption Integer fuelConsumption  new HashMap();    public void setFuelConsumption(FuelConsumption consumption, int value) {        fuelConsumption.put( consumption, value );    }    //...} Car car  new Car();car.setFuelConsumption( Car.FuelConsumption.HIGHWAY, 20 );SetConstraintViolationCar constraintViolations  validator.validate( car );assertEquals( 1, constraintViolations.size() );ConstraintViolationCar constraintViolation         constraintViolations.iterator().next();assertEquals(        20 is outside the max fuel consumption.,        constraintViolation.getMessage());assertEquals(        fuelConsumption[HIGHWAY].map value,        constraintViolation.getPropertyPath().toString()); Car car  new Car();car.setFuelConsumption( null, 5 );SetConstraintViolationCar constraintViolations  validator.validate( car );assertEquals( 1, constraintViolations.size() );ConstraintViolationCar constraintViolation         constraintViolations.iterator().next();assertEquals(        must not be null,        constraintViolation.getMessage());assertEquals(        fuelConsumptionK[].map key,        constraintViolation.getPropertyPath().toString()); 3.4 Optional package org.hibernate.validator.referenceguide.chapter02.containerelement.optional;public class Car {    private OptionalMinTowingCapacity(1000) Integer towingCapacity  Optional.empty();    public void setTowingCapacity(Integer alias) {        towingCapacity  Optional.of( alias );    }    //...} Car car  new Car();car.setTowingCapacity( 100 );SetConstraintViolationCar constraintViolations  validator.validate( car );assertEquals( 1, constraintViolations.size() );ConstraintViolationCar constraintViolation  constraintViolations.iterator().next();assertEquals(        Not enough towing capacity.,        constraintViolation.getMessage());assertEquals(        towingCapacity,        constraintViolation.getPropertyPath().toString()); 3.5 自定义容器 package org.hibernate.validator.referenceguide.chapter02.containerelement.custom;public class Car {    private GearBoxMinTorque(100) Gear gearBox;    public void setGearBox(GearBoxGear gearBox) {        this.gearBox  gearBox;    }    //...} package org.hibernate.validator.referenceguide.chapter02.containerelement.custom;public class GearBoxT extends Gear {    private final T gear;    public GearBox(T gear) {        this.gear  gear;    }    public Gear getGear() {        return this.gear;    }} package org.hibernate.validator.referenceguide.chapter02.containerelement.custom;public class Gear {    private final Integer torque;    public Gear(Integer torque) {        this.torque  torque;    }    public Integer getTorque() {        return torque;    }    public static class AcmeGear extends Gear {        public AcmeGear() {            super( 60 );        }    }} package org.hibernate.validator.referenceguide.chapter02.containerelement.custom;public class GearBoxValueExtractor implements ValueExtractorGearBoxExtractedValue ? {    Override    public void extractValues(GearBoxExtractedValue ? originalValue, ValueExtractor.ValueReceiver receiver) {        receiver.value( null, originalValue.getGear() );    }} Car car  new Car();car.setGearBox( new GearBox( new Gear.AcmeGear() ) );SetConstraintViolationCar constraintViolations  validator.validate( car );assertEquals( 1, constraintViolations.size() );ConstraintViolationCar constraintViolation         constraintViolations.iterator().next();assertEquals(        Gear is not providing enough torque.,        constraintViolation.getMessage());assertEquals(        gearBox,        constraintViolation.getPropertyPath().toString()); 3.6 嵌套容器元素 package org.hibernate.validator.referenceguide.chapter02.containerelement.nested;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.validation.constraints.NotNull;public class Car {    private MapNotNull Part, ListNotNull Manufacturer partManufacturers             new HashMap();    //...} 4. 类级别约束 在这种情况下验证的对象不是单个属性而是完整的对象 适合依赖于对象的多个属性之间的相关性很高的场景 package org.hibernate.validator.referenceguide.chapter02.classlevel;ValidPassengerCountpublic class Car {    private int seatCount;    private ListPerson passengers;    //...} 5. 约束继承 在一个类实现接口或扩展另一个类时在超类上声明的所有约束注释都以与该类本身上指定的约束相同的方式约束 package org.hibernate.validator.referenceguide.chapter02.inheritance;public class Car {    private String manufacturer;    NotNull    public String getManufacturer() {        return manufacturer;    }    //...} package org.hibernate.validator.referenceguide.chapter02.inheritance;public class RentalCar extends Car {    private String rentalStation;    NotNull    public String getRentalStation() {        return rentalStation;    }    //...} RentalCar 不仅会校验getRentalStation而且会校验父类的getManufacturer 若继承换成接口也是会校验超类的 6. 对象图 不仅支持单个对象校验还支持级联验证 对象的级联校验 package org.hibernate.validator.referenceguide.chapter02.objectgraph;public class Car {    NotNull    Valid    private Person driver;    //...} package org.hibernate.validator.referenceguide.chapter02.objectgraph;public class Person {    NotNull    private String name;    //...} 在校验Car的时候会校验Person因此若Car引用的Person的name为空则会校验失败 容器的级联校验 package org.hibernate.validator.referenceguide.chapter02.objectgraph.containerelement;public class Car {    private ListNotNull Valid Person passengers  new ArrayListPerson();    private MapValid Part, ListValid Manufacturer partManufacturers  new HashMap();    //...} package org.hibernate.validator.referenceguide.chapter02.objectgraph.containerelement;public class Part {    NotNull    private String name;    //...} package org.hibernate.validator.referenceguide.chapter02.objectgraph.containerelement;public class Manufacturer {    NotNull    private String name;    //...} 校验Person的名字是否存在为null的 校验Part的名字是否存在为null的 校验所有的Manufacturer是否存在名字为null的 二、验证Bean约束 1. 获取验证器 2. 验证的三种方式 先来个车 class Car {    NotNull    Size(min  5,max  20)    private String manufacturer;    AssertTrue    private boolean isRegistered;    public Car(String manufacturer, boolean isRegistered) {        this.manufacturer  manufacturer;        this.isRegistered  isRegistered;    }} bean全部验证 验证单个属性 对属性的值进行验证 3. 约束违规 「内插的错误消息」 09:35:00.446 [main] INFO com.bm.validate.TestValidatorBean - 内插的错误消息只能为true 非插补的错误消息 09:35:00.446 [main] INFO com.bm.validate.TestValidatorBean - 非插补的错误消息{javax.validation.constraints.AssertTrue.message} 正在验证的根Bean 09:35:00.446 [main] INFO com.bm.validate.TestValidatorBean - 正在验证的根Beancom.bm.validate.Car7c83dc97 如果是bean约束则将约束应用到bean实例如果是属性约束则是托管该约束的属性的bean实例 09:35:00.446 [main] INFO com.bm.validate.TestValidatorBean - 如果是bean约束则将约束应用到bean实例如果是属性约束则是托管该约束的属性的bean实例com.bm.validate.Car7c83dc97 「bean验证器值的属性路径」 09:35:00.447 [main] INFO com.bm.validate.TestValidatorBean - 根bean验证器值的属性路径isRegistered **「报告约束失败的原数据」 09:35:00.447 [main] INFO com.bm.validate.TestValidatorBean - 报告约束失败的原数据false 「告约束失败的元数据」 09:35:00.447 [main] INFO com.bm.validate.TestValidatorBean - 报告约束失败的元数据ConstraintDescriptorImpl{annotationj.v.c.AssertTrue, payloads[], hasComposingConstraintstrue, isReportAsSingleInvalidConstraintfalse, elementTypeFIELD, definedOnDEFINED_LOCALLY, groups[interface javax.validation.groups.Default], attributes{groups[Ljava.lang.Class;60015ef5, message{javax.validation.constraints.AssertTrue.message}, payload[Ljava.lang.Class;2f54a33d}, constraintTypeGENERIC, valueUnwrappingDEFAULT} 三、内置约束 AssertFalse 检查带注释元素的属性为false Boolean, boolean AssertTrue 检查带注释元素的属性为True Boolean,boolean DecimalMax(value, inclusive) inclusive为false检查带注释的值是否小于指定的最大值。否则该值是否小于等于指定的最大值 BigDecimal,BigInteger,CharSequence,byte,short,int,long原始数据包装类,Number,javax.money.MonetaryAmount任意子类 DecimalMin(value, inclusive) inclusive为false检查带注释的值是否大于指定的最小值。否则该值是否大于等于指定的最小值 BigDecimal,BigInteger,CharSequence,byte,short,int,long原始数据包装类,Number,javax.money.MonetaryAmount任意子类 Digits(integer, fraction) integer 指定整数位数限制fraction指定小数位数限制 BigDecimal,BigInteger,CharSequence,byte,short,int,long原始数据包装类,Number,javax.money.MonetaryAmount任意子类 Email 是否为有效的电子邮箱地址 regexp和flags参数指定正则规则必须匹配的其它表达式 CharSequence Future 检查是否是将来的日期 java.util.Datejava.util.Calendarjava.time.Instantjava.time.LocalDatejava.time.LocalDateTimejava.time.LocalTimejava.time.MonthDayjava.time.OffsetDateTimejava.time.OffsetTimejava.time.Yearjava.time.YearMonthjava.time.ZonedDateTimejava.time.chrono.HijrahDatejava.time.chrono.JapaneseDatejava.time.chrono.MinguoDatejava.time.chrono.ThaiBuddhistDate; 如果类路径上有Joda Time日期/时间API 则由HV额外支持ReadablePartial和的任何实现ReadableInstant FutureOnPresent 检查日期是先在还是将来 java.util.Datejava.util.Calendarjava.time.Instantjava.time.LocalDatejava.time.LocalDateTimejava.time.LocalTimejava.time.MonthDayjava.time.OffsetDateTimejava.time.OffsetTimejava.time.Yearjava.time.YearMonthjava.time.ZonedDateTimejava.time.chrono.HijrahDatejava.time.chrono.JapaneseDatejava.time.chrono.MinguoDatejava.time.chrono.ThaiBuddhistDate; 如果类路径上有Joda Time日期/时间API 则由HV额外支持ReadablePartial和的任何实现ReadableInstant Max(value) 是否小于或等于该值 BigDecimalBigIntegerbyteshortintlong和原始类型的相应的包装; HV额外支持的任何子类型CharSequence评估字符序列表示的数值Number和的任何子类型javax.money.MonetaryAmount Min(value) 是否大于或等于该值 BigDecimalBigIntegerbyteshortintlong和原始类型的相应的包装; HV额外支持的任何子类型CharSequence评估字符序列表示的数值Number和的任何子类型javax.money.MonetaryAmount NotBlank 指定字符不为null并且长度大于0 CharSequence NotEmpty 指定字符不为null或为空去除尾随空格 CharSequenceCollectionMap和数组 NotNull 检查注释的值不为null 所有类型均支持 Negative 检查元素是否严格为负零被视为无效 BigDecimalBigIntegerbyteshortintlong和原始类型的相应的包装; HV额外支持的任何子类型CharSequence评估字符序列表示的数值Number和的任何子类型javax.money.MonetaryAmount NegativeOrZero 检查元素是负数或0 BigDecimalBigIntegerbyteshortintlong和原始类型的相应的包装; HV额外支持的任何子类型CharSequence评估字符序列表示的数值Number和的任何子类型javax.money.MonetaryAmount Null 检查注释的值是null 所有类型均支持 Past 检查带注释的日期是否是过去的日期 java.util.Datejava.util.Calendarjava.time.Instantjava.time.LocalDatejava.time.LocalDateTimejava.time.LocalTimejava.time.MonthDayjava.time.OffsetDateTimejava.time.OffsetTimejava.time.Yearjava.time.YearMonthjava.time.ZonedDateTimejava.time.chrono.HijrahDatejava.time.chrono.JapaneseDatejava.time.chrono.MinguoDatejava.time.chrono.ThaiBuddhistDate; 如果类路径上有Joda Time日期/时间API 则由HV附加支持ReadablePartial和的任何实现ReadableInstant PastOrPresent 检查带注释的日期是过去还是现在 java.util.Datejava.util.Calendarjava.time.Instantjava.time.LocalDatejava.time.LocalDateTimejava.time.LocalTimejava.time.MonthDayjava.time.OffsetDateTimejava.time.OffsetTimejava.time.Yearjava.time.YearMonthjava.time.ZonedDateTimejava.time.chrono.HijrahDatejava.time.chrono.JapaneseDatejava.time.chrono.MinguoDatejava.time.chrono.ThaiBuddhistDate; 如果类路径上有Joda Time日期/时间API 则由HV附加支持ReadablePartial和的任何实现ReadableInstant Pattern(regex, flags) regex考虑给定标志检查带注释的字符串是否与正则表达式匹配match CharSequence Positive 检查元素是否严格为正。零值被视为无效 BigDecimalBigIntegerbyteshortintlong和原始类型的相应的包装; HV额外支持的任何子类型CharSequence评估字符序列表示的数值Number和的任何子类型javax.money.MonetaryAmount PositiveOrZero 检查元素是否严格为正或零 BigDecimalBigIntegerbyteshortintlong和原始类型的相应的包装; HV额外支持的任何子类型CharSequence评估字符序列表示的数值Number和的任何子类型javax.money.MonetaryAmount Size(min, max) 检查带注释的元素的大小是否介于min和之间max包括 CharSequenceCollectionMap和数组 CreditCardNumber(ignoreNonDigitCharacters) 检查带注释的字符序列是否通过了Luhn校验和测试 ignoreNonDigitCharacters允许忽略非数字字符。默认值为false。 CharSequence Currency(value) 检查带注释的货币单位javax.money.MonetaryAmount是否为指定货币单位的一部分。 javax.money.MonetaryAmount DurationMax(days, hours, minutes, seconds, millis, nanos, inclusive) 检查带注释的java.time.Duration元素不大于由注释参数构造的元素。如果将inclusiveflag设置为则允许平等true java.time.Duration DurationMin(days, hours, minutes, seconds, millis, nanos, inclusive) 检查带注释的java.time.Duration元素不少于由注释参数构造的元素。如果将inclusiveflag设置为则允许平等true。 java.time.Duration EAN 检查带注释的字符序列是有效的EAN条形码。类型决定条形码的类型 CharSequence ISBN 检查带注释的字符序列是有效的ISBN CharSequence Length(min, max) 验证该注释字符序列是间min和max包含 CharSequence Range(min, max) 检查带注释的值是否介于包括指定的最小值和最大值之间 BigDecimalBigIntegerCharSequencebyteshortintlong和原始类型的相应的包装 UniqueElements 检查带注释的集合仅包含唯一元素。使用该equals()方法确定相等性。默认消息不包括重复元素的列表但是您可以通过覆盖消息并使用{duplicates}message参数来包括它。重复元素的列表也包含在约束违反的动态有效负载中。 Collection负载中。 Collection 本文由 mdnice 多平台发布
http://www.zqtcl.cn/news/515310/

相关文章:

  • 专门做私人定制旅游的网站专做韩餐网站
  • 网站 续费wordpress首页调用指定分类
  • 2008系统怎么做网站免费设计软件下载
  • 做电音的软件的专业下载网站宁波俄语网站建设
  • 北?? 网站建设旅游手机网站开发
  • 乐清做网站的网站备案容易通过吗
  • 网站qq登录 开发一个小型网站开发成本
  • 湖北网络建设公司网站js跳转到别的网站
  • 郑州网站app开发的汽车网站 源码
  • 河南网站建设企业做网站多少钱西宁君博示范
  • 沈阳有做网站的吗青浦手机网站制作
  • 腾讯云免费建站建立一个网站英语
  • 沙漠风网站建设怎么样官方网站建设银行2010年存款利息
  • 360报危险网站微信代码小程序
  • 网站维护报价单国外 做励志视频的网站
  • 用源码做自己的网站公司网站建设哪家公司好
  • 网站运营做seohtml前端网站开发PPT
  • 上海网站定制设计图wordpress网站在线安装
  • 互动网站的核心技术wordpress不用插件
  • 厦门市建设工程交易中心网站怎么自己做游戏软件的app
  • 网站论文参考文献人力资源公司名称大全简单大气
  • 射阳做企业网站哪家好wordpress 进销存
  • 青海个人旅游网站建设wordpress用户名密码加密方式
  • 安徽平台网站建设找哪家wordpress首页加登录
  • 雅安市住房和城乡建设局网站湖南全程电子化服务平台官网
  • dw做的上传网站打不开网页制作培训价格
  • 工程网站怎么做广州做网站平台
  • 成都网站建设 全美深圳定制网站建设
  • 邢台网站建设与制作陕西高速公路建设集团网站
  • 太原 招聘 网站建设 技术经理关于 建设 二级网站