有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在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);
    }
}

有什么方法可以实现我在这里想要实现的目标吗


共 (2) 个答案

  1. # 1 楼答案

    我发现this article准确地描述了如何实现我的解决方案。一旦我将POJO作为一个组件(这可能不是必需的),Spring就开始在设置参数之前拦截我的方法。这就是我想要实现的

  2. # 2 楼答案

    你说得对。注释本身不起任何作用。您应该调用一些代码来内省这些注释并做一些事情(在您的案例中进行验证)

    数据验证是项处理器的典型用例,这就是为什么SpringBatch提供ValidatingItemProcessor。如果要对有效项目进行某些处理(无效项目将被拒绝或筛选,并且不会在链中继续),则始终可以在CompositeItemProcessor中链接另一个处理器