问题标签 [hibernate-validator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Hibernate Validator 可以用作 Hibernate 之外的组件吗?
我正在尝试为消息有效负载(即 json)添加验证。我正在使用Jackson Json 处理器进行数据绑定,这对我来说效果很好,使用 bean 方法和偶尔的一两个注释。
但除了数据绑定之外,我想以声明方式验证实际值:特别是我更喜欢注释而不是任何外部模式(DRY 原则,保持代码和约束完全同步)。所以我正在寻找一个简单的验证库来做到这一点。
看起来 JSR-303 几乎定义了声明部分所需的注释。看起来Hibernate Validator是使用这些注释的实际验证器的实现。但是文档涵盖了与 Hibernate 一起使用的用例,所以我不确定它是否可以在 Hibernate 本身之外使用。由于我不对相关服务进行任何数据库访问,因此我宁愿不包括 Hibernate 的其他部分。
有没有人这样做或对样本有很好的指导?
或者,如果有人知道另一个很好的 JSR-303 实现也可以。
java - 如何在运行时更改注释/休眠验证规则?
如果有一个包含某些字段的 Java 类,我想使用 Hibernate Validator 进行验证。现在我希望我的用户能够在运行时配置进行哪些验证。
例如:
假设我想删除支票或用orNotEmpty
替换它,我该怎么做?甚至可能吗?我想这归结为在运行时更改注释......Email
CreditCardNumber
hibernate-validator - 为什么 Hibernate Validator @NotEmpty 会产生重复的消息?
在使用 Hibernate Validator时,我注意到@NotEmpty
和@NotNull
注释在.InvalidValue
getInvalidValues(...)
如果我指定一条类似 的消息@NotEmpty(message = "My error message.")
,那么我将得到一个“我的错误消息”的 InvalidValue。和第二个“可能不为空或为空”
如果我不包含消息(例如单独包含消息@NotEmpty
),那么我会得到两个 InvalidValue 副本,其中包含“可能不是 null 或空”的消息字段。
为什么 Hibernate Validator 会这样做?我不应该收到一条消息,要么是我使用参数覆盖的值,要么是默认消息,但不能同时收到两者?
有关更多上下文:
我正在扩展ClassValidator<T>
我自己的ClassValidator<MyClass>
实现。我这样做是为了添加一些无法通过 annotation 完成的自定义验证。我需要查看类的多个属性的运行时值以确定验证。
当我调用我覆盖的 myClassValidator.getInvalidValues() 时,我得到了验证。在我的实现中,getInvalidValues()
我调用super.getInvalidValues()
以创建初始错误列表,然后将自定义错误添加到该列表中。在任何情况下,调用都super.getInvalidValues()
包含重复的消息,一个与传递到注释的消息属性匹配,另一个与注释消息的库存值匹配。
jsf - 显示自定义转换错误消息
我正在使用带有 JSF 的休眠验证器。如何设置我的转换错误消息?我以以下方式使用它们,但它不起作用:
我可以像这样在我的 bean 中设置自定义验证器消息:
但是如何处理转换错误?
validation - Spring JSR303 验证不像 Spring Documentation 中描述的那样工作
我尝试为我的 Web 应用程序实现验证,如Spring 3.0 文档的第5.7.4.3节所述:
我已将 hibernate-validator 添加为依赖项,一切看起来都不错,但启动我的 Web 应用程序会导致以下错误:
在查看 API 时,很明显有些地方出了问题。LocalValidatorFactoryBean
实现javax.validation.Validator
whileConfigurableWebBindingInitializer.setValidator()
期望一个org.springframework.validation.Validator
.
有什么解决办法吗?
编辑
这是 Spring 应用程序上下文中 (JSR-303) 设置的中心类
javax.validation
:它引导 a并通过 Spring接口以及 JSR-303接口和接口本身javax.validation.ValidationFactory
公开它。Validator
Validator
ValidatorFactory
就像亚历克斯马歇尔在下面所说的那样,情况并非如此。LocalValidatorFactoryBean
只实现javax.validation.Validator
。
LocalValidatorFactoryBean
确实扩展SpringValidatorAdapter
了,它实现了 org.springframework.validation.Validator
.
hibernate - Hibernate-validator:@NotEmpty 不适用于空值
我用@NotEmpty 标记注释了一个字符串字段。
当我尝试使用该字段的值“”来持久化实体时,它工作正常。机制检测到验证错误并引发 InvalidStateException 异常通知问题。
但是,当我尝试使用该字段的值为 null 来持久化实体时,会引发 UndeclaredThrowableException(由 InvocationTargetException 引起,由 PropertyValueException:not-null 属性引用 null 或瞬态值引起)异常,因为系统试图用 null 值访问数据库在不可为空的字段上。
问题很明显:为什么验证机制没有检测到这种情况?我认为它应该引发 InvalidStateException 异常而不是 UndeclaredThrowableException。
我正在使用以下库:
现在我只是升级到
这些是最新的稳定版本。
但它仍然无法正常工作。
任何的想法?
完整的错误跟踪:
尝试将合并事件侦听器注册到 sessionFactory bean:
它引发以下错误:
提前致谢。
java - Hibernate 验证器异常
我在带有 EJB 和 Spring MVC 的应用程序中使用 Hibernate Validator。我正在使用 JBoss 5、Hibernate 3 和 Spring MVC 版本 3。
我想尝试在 Spring Exception Resolver 级别捕获验证异常,并根据该消息生成错误InvalidStateException
消息。我不想把异常处理逻辑放在数据访问层;我希望这由注释驱动,并且只在一个集中的地方处理验证错误。
InvalidStateException
当我尝试创建无效实体(例如,违反字段的长度约束)时,域模型正在被正确验证,并且按预期抛出类型异常。在尝试在我的 Spring 异常解析器实例中捕获异常时,我发现我的原始异常已经消失并且 ajavax.ejb.EJBTransactionRolledbackException
已经取而代之。原始异常不在引起列表中。
我的第一个猜测是它org.hibernate.validator.InvalidStateException
没有用 注释ApplicationException
,所以我安装了一个 Hibernate 事件监听器,捕获了原始异常并将其重新抛出为一个用 注释的新异常ApplicationException
。这没有效果。
另一个复杂性是 Web 层通过远程接口调用 EJB。我用 注释了我的异常类WebFault
,但无济于事。
我应该怎么做才能确保异常冒泡?
java - 如何使用 Spring 3.x 使用 Hibernate @Valid 约束?
我正在使用简单的表单来验证像这样的字段。
我还在我的类路径上提供了 getter 和 setter hibernate 依赖项。但是我仍然不知道如何验证简单的表单,实际上没有太多关于 spring hibernate 组合的文档。
您能否解释一下或提供一些教程,除了原始 spring 3.x 文档
hibernate - 基于 @Range 的休眠验证检查
我想在我的 JPA 实体代码中执行基于 @Range 的休眠验证检查 (org.hibernate.validator.RangeValidator)。但它似乎用我想避免的这种检查来修改生成的 SQL。(即在范围检查中,我将当前年份作为@Range 最大值,该最大值每年都会发生变化)。
因此,我不得不从我的 JPA 实体类中删除这个注释。我如何能够在不添加注释的情况下执行类似的检查?如果是这样,我应该在 prePersist 或 preUpdate 中进行这些检查,我该如何调用验证器。
感谢有关此主题的任何输入
validation - 使用 Hibernate Validator (JSR 303) 进行跨字段验证
Hibernate Validator 4.x 中是否有跨字段验证的实现(或第三方实现)?如果不是,实现跨字段验证器的最简洁方法是什么?
例如,如何使用 API 来验证两个 bean 属性是否相等(例如验证密码字段与密码验证字段匹配)。
在注释中,我希望是这样的: