0

我有一个复合 bean,其中包括内部 bean,其中一些内部 bean 也有内部 bean。这个复合 bean 总共有 200 多个属性(这个 bean 的属性 + 内部 bean 的属性)。我正在使用JSR 303来验证用户输入。我的要求建议进行跨字段 bean 验证。

关于相同的内容,我浏览了一些博客和建议,例如http://dwuysan.wordpress.com/2012/03/20/cross-field-validation-using-bean-validation-jsr-303/。类似的解释可以在这里找到:Cross field validation with Hibernate Validator (JSR 303)

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

我想知道使用在运行时评估(性能下降)的反射来定义 JSR 303 corss-field 约束或者通过自定义方法进行其他验证策略(如 Spring 验证或服务层验证)是否很好?

4

1 回答 1

1

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

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

于 2013-06-17T10:11:51.847 回答