当前位置: 首页 > 知识库问答 >
问题:

JSR 303通过定义自定义约束进行跨域验证:性能问题

酆君墨
2023-03-14

我有一个复合bean,它包括内部bean,其中一些内部bean也有内部bean。这个复合bean总共有200个属性(这个bean的属性内部bean的属性)。我使用JSR303验证用户输入。我的需求建议进行跨域bean验证。

我已经通过了一些博客和建议,如html" target="_blank">http://dwuysan.wordpress.com/2012/03/20/cross-field-validation-using-bean-validation-jsr-303/,关于相同的。类似的解释可以在这里找到:使用Hibernate Validator(JSR 303)进行跨场验证。

两者都建议使用相同的方法来定义跨字段验证的类级约束。他们的方法是使用小海狸。getProperty()方法,该方法在执行bean验证时在运行时使用Java反射。

我想知道,使用在运行时进行评估(性能降低)的反射来定义JSR 303 corss字段CONTAINS,或者使用其他验证策略(如Spring验证或通过自定义方法进行的服务层验证)是好的吗?


共有1个答案

钮刚洁
2023-03-14

如果您的需求只是实现一些跨域验证规则,那么我建议您实现专用的类级约束,这些约束只需调用相关属性的getter即可访问相关属性。这将保存约束类型并避免反射。

如果有很多跨域验证,这使得为所有约束创建专用约束成为一项乏味的任务,那么像@FieldMatch这样的通用方法可能会节省一些工作。我认为在大多数情况下,反思的开销应该可以忽略。如果您看到性能降级,您仍然可以为最关键的情况实现特定的类级别约束。

 类似资料:
  • 我有一个自定义注释@UniqueModel,它由ConstraintValidator验证: 问题是,我需要在调用存储库的safe()-方法之前进行验证,否则字段注入将无法工作。 因此,我创建了一个带有@Valid注释的委托方法,以便在以下情况之前强制进行唯一验证: 不幸的是,这不起作用,似乎@Valid注释被Spring忽略了。 我如何确保验证的正确时间?

  • 我已经为此斗争了好几天,我已经阅读了这里的所有讨论,但没有解决方案...... 我有一个自定义约束… 独一无二.java 这是由UniqueConstraintValidator使用的.java 现在,我的模型有这个注释,我需要在其中验证字段的唯一性 现在,我知道自定义注释在更新现有对象时不起作用,但是现在我需要了解它是如何工作的。假设我们想要添加一个新对象。 当我试图保存一个已经存在的值时,我得

  • TLDR:我想要在单独的模块中单独的自定义bean验证定义及其ConstraintValidator实现。为此,我必须使用ConstraintMmap手动注册。它适用于带注释的类。但是定义的绑定不共享/可用于通过validation-constraints.xml.定义的验证如何修复?我试图调试它,以找出它在哪里初始化以及为什么会出现问题,但初始化这些远非易事。 动机: 一) 分离模块:如果API

  • 配置类 注释类 验证程序类 我有一个属性为的类,我还使用了其他注释,比如和,最后两个可以工作,但我的自定义注释不工作。 你能帮助理解为什么Spring不调用自定义验证器吗?

  • 我在项目中使用bean验证,我想为现有的约束注释编写一个自定义验证器。 例如,我有一个类,它表示一个名为CustomDateTime的日期/时间。在使用此类作为例如出生日期的类中,我想用过去的日期对字段进行注释: 然后,我通过实现ConstraintValidator创建一个自定义验证器 我知道您通常会创建这样的单独注释: 但对我来说,这似乎是双重代码;-) 如何注册要与一起使用的自定义验证器?

  • 我对Spring有问题,尤其是ConstraintValidator。我想为包含电子邮件的字段发布自定义验证。它必须是独一无二的。好啊任务很明确,我是这样做的: UniqueMail。JAVA UniqueMailValidator。JAVA User.java 用户epository.java 授权控制器。JAVA 如果我尝试输入现有的电子邮件一切正常(得到消息电子邮件地址已经注册)。但如果我尝