在spring批处理应用程序中实现带注解的javabean验证

thtygnil  于 2021-07-07  发布在  Java
关注(0)|答案(2)|浏览(320)

我正试图在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);
    }
}

有什么办法可以达到我在这里想要达到的目的吗?

fnx2tebb

fnx2tebb1#

我发现这篇文章准确地描述了如何实现我的解决方案。一旦我将pojo作为一个组件(这可能不是必需的),spring就开始在设置参数之前拦截我的方法。这就是我想要达到的目标。

zdwk9cvp

zdwk9cvp2#

你说得对。注解本身不起任何作用。您应该调用一些代码来内省这些注解并执行一些操作(在您的案例中进行验证)。
数据验证是项处理器的典型用例,这就是为什么springbatch提供 ValidatingItemProcessor . 你总是可以在一个系统中链接另一个处理器 CompositeItemProcessor 如果您想对有效项目进行一些处理(无效项目将被拒绝或过滤,并且不会在链中继续)。

相关问题