深入了解数据校验:Java Bean Validation 2.0(JSR303、JSR349、JSR380)Hibernate-Validation 6.x使用案例【享学Java】(下)

简介: 深入了解数据校验:Java Bean Validation 2.0(JSR303、JSR349、JSR380)Hibernate-Validation 6.x使用案例【享学Java】(下)

该接口提供了一些标准的配置项。在实际应用中都是使用Hibernate Validation,所以再看看这个具体的子接口:


public interface HibernateValidatorConfiguration extends Configuration<HibernateValidatorConfiguration> {
  // 这批属性,证明直接可以通过System属性值来控制,大大地方便~
  // 这个机制快速失败机制:true检查完一个有错误就返回,false全部检查完把错误消息一起返回   默认false
  String FAIL_FAST = "hibernate.validator.fail_fast"; 
  String ALLOW_PARAMETER_CONSTRAINT_OVERRIDE = "hibernate.validator.allow_parameter_constraint_override";
  String ALLOW_MULTIPLE_CASCADED_VALIDATION_ON_RESULT = "hibernate.validator.allow_multiple_cascaded_validation_on_result";
  String ALLOW_PARALLEL_METHODS_DEFINE_PARAMETER_CONSTRAINTS = "hibernate.validator.allow_parallel_method_parameter_constraint";
  // @since 5.2
  @Deprecated
  String CONSTRAINT_MAPPING_CONTRIBUTOR = "hibernate.validator.constraint_mapping_contributor";
  // @since 5.3
  String CONSTRAINT_MAPPING_CONTRIBUTORS = "hibernate.validator.constraint_mapping_contributors";
  // @since 6.0.3
  String ENABLE_TRAVERSABLE_RESOLVER_RESULT_CACHE = "hibernate.validator.enable_traversable_resolver_result_cache";
  // @since 6.0.3  ScriptEvaluatorFactory:执行脚本
  @Incubating
  String SCRIPT_EVALUATOR_FACTORY_CLASSNAME = "hibernate.validator.script_evaluator_factory";
  // @since 6.0.5 comparing date/time in temporal constraints. In milliseconds.
  @Incubating
  String TEMPORAL_VALIDATION_TOLERANCE = "hibernate.validator.temporal_validation_tolerance";
  // ResourceBundleMessageInterpolator用于 load resource bundles
  ResourceBundleLocator getDefaultResourceBundleLocator();
  // 创建一个ConstraintMapping:通过编程API配置的约束映射
  // 设置映射后,必须通过addMapping(constraintmapping)将其添加到此配置中。
  ConstraintMapping createConstraintMapping();
  // 拿到所有的值提取器  @since 6.0
  @Incubating
  Set<ValueExtractor<?>> getDefaultValueExtractors();
  // 往下就开始配置了~~~~~~~~~~
  HibernateValidatorConfiguration addMapping(ConstraintMapping mapping);
  HibernateValidatorConfiguration failFast(boolean failFast);
  // used for loading user-provided resources:
  HibernateValidatorConfiguration externalClassLoader(ClassLoader externalClassLoader);
  // true:表示允许覆盖约束的方法。false表示不予许(抛出异常)  默认值是false
  HibernateValidatorConfiguration allowOverridingMethodAlterParameterConstraint(boolean allow);
  // 定义是否允许对返回值标记多个约束以进行级联验证。  默认是false
  HibernateValidatorConfiguration allowMultipleCascadedValidationOnReturnValues(boolean allow);
  // 定义约束的**并行方法**是否应引发ConstraintDefinitionException
  HibernateValidatorConfiguration allowParallelMethodsDefineParameterConstraints(boolean allow);
  // 是否允许缓存TraversableResolver  默认值是true
  HibernateValidatorConfiguration enableTraversableResolverResultCache(boolean enabled);
  // 设置一个脚本执行器
  @Incubating
  HibernateValidatorConfiguration scriptEvaluatorFactory(ScriptEvaluatorFactory scriptEvaluatorFactory);
  // 允许在时间约束中比较日期/时间时设置可接受的误差范围
  // 比如@Past @PastOrPresent @Future @FutureOrPresent
  @Incubating
  HibernateValidatorConfiguration temporalValidationTolerance(Duration temporalValidationTolerance);
  // 允许设置将传递给约束验证器的有效负载。如果多次调用该方法,则只传播最后传递的有效负载。
  @Incubating
  HibernateValidatorConfiguration constraintValidatorPayload(Object constraintValidatorPayload);
}


关于此接口的唯一实现类:ConfigurationImpl,这里就不用再做分析了,因为对于Validation这块,咱们面向接口编程是完全没有问题的~


准备好了Configuration后,下一步显然就是configuration.buildValidatorFactory()来得到一个ValidatorFactory喽,关于ValidatorFactory这块的内容,请听下文分解~


总结


该文讲解是关于Bean Validation数据校验,在现在Spring的高度封装下,越来越少的人能够主动去发现Java实现/标准了~

实际上Spring的强大并不是自己创造了多少轮子,而是它主要是带来了更为简单的抽象,从而减少样板代码、促进解耦、提高可单测性。因此对于有些常用的功能还是建议稍微了解多一点,做到心中有数,运用起来也才会更加的游刃有余

相关文章
|
2月前
|
人工智能 Java 定位技术
人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏
这篇文章通过一个使用ChatGPT实现的Java扫雷小游戏案例,展示了ChatGPT在编程领域的应用能力。文章中包含了扫雷游戏的Java代码实现,代码中初始化了雷区地图,随机放置雷,计算每个格子周围雷的数量,并提供了一个简单的文本界面与用户交互进行游戏。游戏通过控制台输入接受玩家的指令,并给出相应的反馈。
人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏
|
2月前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
Java并发编程案例分析:死锁的检测与解决
25 2
|
2月前
|
安全 Java API
精通 Java 后台开发:案例分析与实践
精通 Java 后台开发:案例分析与实践
37 2
|
2月前
|
Java
Java枚举使用的基本案例
这篇文章是关于Java枚举的基本使用,通过一个指令下发的代码案例,展示了如何定义枚举、使用枚举以及如何通过枚举实现指令的匹配和处理。
|
2月前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
|
2月前
|
前端开发 Java 测试技术
综合案例【商品管理系统-Java基础版】(附完整源码)
综合案例【商品管理系统-Java基础版】(附完整源码)
87 9
|
2月前
|
Java
Java数组的2个小案例(杨辉三角分析和商品管理增删改查)
Java数组的2个小案例(杨辉三角分析和商品管理增删改查)
46 4
|
2月前
|
Java 数据库连接 数据库
携手前行:在Java世界中深入挖掘Hibernate与JPA的协同效应
【8月更文挑战第31天】Java持久化API(JPA)是一种Java规范,为数据库数据持久化提供对象关系映射(ORM)方法。JPA定义了实体类与数据库表的映射及数据查询和事务控制方式,确保不同实现间的兼容性。Hibernate是JPA规范的一种实现,提供了二级缓存、延迟加载等丰富特性,提升应用性能和可维护性。通过结合JPA和Hibernate,开发者能编写符合规范且具有高度可移植性的代码,并利用Hibernate的额外功能优化数据持久化操作。
34 0
|
2月前
|
安全 Java
Java RMI技术详解与案例分析
在实际的银行系统中,当然还需要考虑安全性、事务性、持久性以及错误处理等多方面的因素,RMI的网络通信也需要在安全的网络环境下进行,以防止数据泄露或被篡改。你在应用中是怎么使用 RMI 的,欢迎关注威哥爱编程,一起交流一下哈。
154 4
|
2月前
|
XML SQL Java
下一篇
无影云桌面