在SpringBatch应用程序中使用注释实现JavaBean验证
我正试图在Spring批处理应用程序中使用的JavaBean上实现JSR308验证注释。SpringBatch提供了一个ValidatingItemProcessor
,但我想在进入处理器步骤之前进行验证,所以我决定使用Java注释
我认为我可以将注释添加到一个方法参数中,如果该参数未验证,则永远不会调用该方法。但不是这样的。显然我还是得先打电话给Validator.validate()
。我说得对吗
这是my 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);
}
}
有什么方法可以实现我在这里想要实现的目标吗
# 1 楼答案
我发现this article准确地描述了如何实现我的解决方案。一旦我将POJO作为一个组件(这可能不是必需的),Spring就开始在设置参数之前拦截我的方法。这就是我想要实现的
# 2 楼答案
你说得对。注释本身不起任何作用。您应该调用一些代码来内省这些注释并做一些事情(在您的案例中进行验证)
数据验证是项处理器的典型用例,这就是为什么SpringBatch提供
ValidatingItemProcessor
。如果要对有效项目进行某些处理(无效项目将被拒绝或筛选,并且不会在链中继续),则始终可以在CompositeItemProcessor
中链接另一个处理器