我正试图在spring批处理应用程序中使用的javabean上实现jsr308验证注解。spring批处理提供了 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);
}
}
有什么办法可以达到我在这里想要达到的目的吗?
2条答案
按热度按时间fnx2tebb1#
我发现这篇文章准确地描述了如何实现我的解决方案。一旦我将pojo作为一个组件(这可能不是必需的),spring就开始在设置参数之前拦截我的方法。这就是我想要达到的目标。
zdwk9cvp2#
你说得对。注解本身不起任何作用。您应该调用一些代码来内省这些注解并执行一些操作(在您的案例中进行验证)。
数据验证是项处理器的典型用例,这就是为什么springbatch提供
ValidatingItemProcessor
. 你总是可以在一个系统中链接另一个处理器CompositeItemProcessor
如果您想对有效项目进行一些处理(无效项目将被拒绝或过滤,并且不会在链中继续)。