在 Spring Batch 应用程序中使用注释实现 Java Bean 验证
Implementing Java Bean Validation with annotations in Spring Batch app
我正在尝试在我的 Java Bean 上实现 JSR 308 验证注释,该 Bean 在 Spring Batch 应用程序中使用。 Spring Batch 提供了一个 ValidatingItemProcessor
,但我想在进入处理器步骤之前进行验证,所以我决定使用 Java 注释。
我认为我可以将注释添加到方法参数,如果该参数未通过验证,则永远不会调用该方法。但它不是那样工作的。显然我仍然必须先调用 Validator.validate()
。我说得对吗?
这是我的 bean 示例,带有自定义注释:
public void setValue(@NullOrDecimal String value) {
// I don't want to come into this method if "value" isn't a null or a decimal
if (StringUtils.isNotEmpty(value)) {
this.value = new BigDecimal(value);
}
}
有什么方法可以实现我在这里想要实现的目标吗?
你是对的。注释本身什么也不做。您应该调用一些代码来反省此注释并执行某些操作(在您的情况下为验证)。
数据验证是项目处理器的典型用例,这就是 Spring Batch 提供 ValidatingItemProcessor
的原因。如果您想对有效项目进行一些处理,您始终可以在 CompositeItemProcessor
中链接另一个处理器(无效项目将被拒绝或过滤,并且不会在链中继续)。
我发现 this article 准确描述了如何实现我的解决方案。一旦我使我的 POJO 成为一个组件(这可能不是必需的),Spring 就开始在设置参数之前拦截我的方法。这就是我想要实现的目标。
我正在尝试在我的 Java Bean 上实现 JSR 308 验证注释,该 Bean 在 Spring Batch 应用程序中使用。 Spring Batch 提供了一个 ValidatingItemProcessor
,但我想在进入处理器步骤之前进行验证,所以我决定使用 Java 注释。
我认为我可以将注释添加到方法参数,如果该参数未通过验证,则永远不会调用该方法。但它不是那样工作的。显然我仍然必须先调用 Validator.validate()
。我说得对吗?
这是我的 bean 示例,带有自定义注释:
public void setValue(@NullOrDecimal String value) {
// I don't want to come into this method if "value" isn't a null or a decimal
if (StringUtils.isNotEmpty(value)) {
this.value = new BigDecimal(value);
}
}
有什么方法可以实现我在这里想要实现的目标吗?
你是对的。注释本身什么也不做。您应该调用一些代码来反省此注释并执行某些操作(在您的情况下为验证)。
数据验证是项目处理器的典型用例,这就是 Spring Batch 提供 ValidatingItemProcessor
的原因。如果您想对有效项目进行一些处理,您始终可以在 CompositeItemProcessor
中链接另一个处理器(无效项目将被拒绝或过滤,并且不会在链中继续)。
我发现 this article 准确描述了如何实现我的解决方案。一旦我使我的 POJO 成为一个组件(这可能不是必需的),Spring 就开始在设置参数之前拦截我的方法。这就是我想要实现的目标。