问题标签 [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.

0 投票
1 回答
1049 浏览

java - Hibernate Validator 可以用作 Hibernate 之外的组件吗?

我正在尝试为消息有效负载(即 json)添加验证。我正在使用Jackson Json 处理器进行数据绑定,这对我来说效果很好,使用 bean 方法和偶尔的一两个注释。

但除了数据绑定之外,我想以声明方式验证实际值:特别是我更喜欢注释而不是任何外部模式(DRY 原则,保持代码和约束完全同步)。所以我正在寻找一个简单的验证库来做到这一点。

看起来 JSR-303 几乎定义了声明部分所需的注释。看起来Hibernate Validator是使用这些注释的实际验证器的实现。但是文档涵盖了与 Hibernate 一起使用的用例,所以我不确定它是否可以在 Hibernate 本身之外使用。由于我不对相关服务进行任何数据库访问,因此我宁愿不包括 Hibernate 的其他部分。

有没有人这样做或对样本有很好的指导?

或者,如果有人知道另一个很好的 JSR-303 实现也可以。

0 投票
3 回答
4597 浏览

java - 如何在运行时更改注释/休眠验证规则?

如果有一个包含某些字段的 Java 类,我想使用 Hibernate Validator 进行验证。现在我希望我的用户能够在运行时配置进行哪些验证。

例如:

假设我想删除支票或用orNotEmpty替换它,我该怎么做?甚至可能吗?我想这归结为在运行时更改注释......EmailCreditCardNumber

0 投票
1 回答
4553 浏览

hibernate-validator - 为什么 Hibernate Validator @NotEmpty 会产生重复的消息?

在使用 Hibernate Validator时,我注意到@NotEmpty@NotNull注释在.InvalidValuegetInvalidValues(...)

如果我指定一条类似 的消息@NotEmpty(message = "My error message."),那么我将得到一个“我的错误消息”的 InvalidValue。和第二个“可能不为空或为空”

如果我不包含消息(例如单独包含消息@NotEmpty),那么我会得到两个 InvalidValue 副本,其中包含“可能不是 null 或空”的消息字段。

为什么 Hibernate Validator 会这样做?我不应该收到一条消息,要么是我使用参数覆盖的值,要么是默认消息,但不能同时收到两者?


有关更多上下文:

我正在扩展ClassValidator<T>我自己的ClassValidator<MyClass>实现。我这样做是为了添加一些无法通过 annotation 完成的自定义验证。我需要查看类的多个属性的运行时值以确定验证。

当我调用我覆盖的 myClassValidator.getInvalidValues() 时,我得到了验证。在我的实现中,getInvalidValues()我调用super.getInvalidValues()以创建初始错误列表,然后将自定义错误添加到该列表中。在任何情况下,调用都super.getInvalidValues()包含重复的消息,一个与传递到注释的消息属性匹配,另一个与注释消息的库存值匹配。


0 投票
1 回答
4338 浏览

jsf - 显示自定义转换错误消息

我正在使用带有 JSF 的休眠验证器。如何设置我的转换错误消息?我以以下方式使用它们,但它不起作用:

我可以像这样在我的 bean 中设置自定义验证器消息:

但是如何处理转换错误?

0 投票
2 回答
7909 浏览

validation - Spring JSR303 验证不像 Spring Documentation 中描述的那样工作

我尝试为我的 Web 应用程序实现验证,如Spring 3.0 文档的第5.7.4.3节所述:

我已将 hibernate-validator 添加为依赖项,一切看起来都不错,但启动我的 Web 应用程序会导致以下错误:

在查看 API 时,很明显有些地方出了问题。LocalValidatorFactoryBean实现javax.validation.ValidatorwhileConfigurableWebBindingInitializer.setValidator()期望一个org.springframework.validation.Validator.

有什么解决办法吗?

编辑

关于LocalValidatorFactoryBean

这是 Spring 应用程序上下文中 (JSR-303) 设置的中心类javax.validation:它引导 a并通过 Spring接口以及 JSR-303接口和接口本身javax.validation.ValidationFactory 公开它。ValidatorValidatorValidatorFactory

就像亚历克斯马歇尔在下面所说的那样,情况并非如此。LocalValidatorFactoryBean只实现javax.validation.Validator

LocalValidatorFactoryBean确实扩展SpringValidatorAdapter了,它实现了 org.springframework.validation.Validator.

0 投票
2 回答
5027 浏览

hibernate - Hibernate-validator:@NotEmpty 不适用于空值

我用@NotEmpty 标记注释了一个字符串字段。

当我尝试使用该字段的值“”来持久化实体时,它工作正常。机制检测到验证错误并引发 InvalidStateException 异常通知问题。

但是,当我尝试使用该字段的值为 null 来持久化实体时,会引发 UndeclaredThrowableException(由 InvocationTargetException 引起,由 PropertyValueException:not-null 属性引用 null 或瞬态值引起)异常,因为系统试图用 null 值访问数据库在不可为空的字段上。

问题很明显:为什么验证机制没有检测到这种情况?我认为它应该引发 InvalidStateException 异常而不是 UndeclaredThrowableException。

我正在使用以下库:

现在我只是升级到

这些是最新的稳定版本。

但它仍然无法正常工作。

任何的想法?

完整的错误跟踪:

尝试将合并事件侦听器注册到 sessionFactory bean:

它引发以下错误:

提前致谢。

0 投票
1 回答
4002 浏览

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,但无济于事。

我应该怎么做才能确保异常冒泡?

0 投票
3 回答
10312 浏览

java - 如何使用 Spring 3.x 使用 Hibernate @Valid 约束?

我正在使用简单的表单来验证像这样的字段。

我还在我的类路径上提供了 getter 和 setter hibernate 依赖项。但是我仍然不知道如何验证简单的表单,实际上没有太多关于 spring hibernate 组合的文档。

您能否解释一下或提供一些教程,除了原始 spring 3.x 文档

0 投票
1 回答
1462 浏览

hibernate - 基于 @Range 的休眠验证检查

我想在我的 JPA 实体代码中执行基于 @Range 的休眠验证检查 (org.hibernate.validator.RangeValidator)。但它似乎用我想避免的这种检查来修改生成的 SQL。(即在范围检查中,我将当前年份作为@Range 最大值,该最大值每年都会发生变化)。

因此,我不得不从我的 JPA 实体类中删除这个注释。我如何能够在不添加注释的情况下执行类似的检查?如果是这样,我应该在 prePersist 或 preUpdate 中进行这些检查,我该如何调用验证器。

感谢有关此主题的任何输入

0 投票
15 回答
179274 浏览

validation - 使用 Hibernate Validator (JSR 303) 进行跨字段验证

Hibernate Validator 4.x 中是否有跨字段验证的实现(或第三方实现)?如果不是,实现跨字段验证器的最简洁方法是什么?

例如,如何使用 API 来验证两个 bean 属性是否相等(例如验证密码字段与密码验证字段匹配)。

在注释中,我希望是这样的: