java - Spring集成验证

标签 java spring validation spring-integration

在 Spring Integration 中进行验证的最佳方法是什么。 例如,如果我们有一个入站网关,当收到消息时我们想要验证它。如果无效 -> 将验证错误返回给网关,否则 -> 继续应用程序的正常流程(转换、处理...)。

我尝试了过滤器:

        @Bean
        public IntegrationFlow flow() {
            return IntegrationFlows.from(requestChannel())
                    .transform(new MapToObjectTransformer(Campaign.class))
                    .filter(Campaign.class, 
                            c -> c.getId() > 10 ? true : false, //if id > 10 then it's valid
                            e -> e.discardChannel(validationError()))
                    .handle(new MyHandler())
                    .get();
        }

        @Bean
        public IntegrationFlow validationErrorFlow() {
            return IntegrationFlows.from(validationError())
                    .handle(new ValidationHandler())//construct a message with the validation errors
                    .get();
        }

它可以工作,但是如果我使用 spring validator 这样的话然后我必须在过滤器和 ValidationHandler (可以是转换器)中调用它两次才能获取错误。

还有什么更好的办法吗?

最佳答案

.handle(new ValidationHandler())

您实际上并不需要为每个错误创建一个新的处理程序。

在过滤器中,如果验证失败,则抛出 MyValidationException(errors)

在网关错误 channel 上的错误流中,ErrorMessage 的有效负载是 MessagingException,其原因是 MyValidatationException,和failedMessage

类似...

.handle(validationErrorHandler())

...

@Bean
public MessageHandler validationErrorHandler() {
    return new AbstractReplyProducingMessageHandler() {
        public Object handleRequestMessage(Message<?> error) {
            MyValidationException myEx = (MyValidationException) 
                  ((ErrorMessage) error).getPayload.getCause();
            Errors errors = myEx.getErrors();
            ...
        }
    }
}

或者您可以使用 POJO messageHandler

public Object handle(MessagingException e) {
    ...
}

关于java - Spring集成验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31222373/

相关文章:

java - 使用 Selenium Webdriver Java 检索第 3 方和所有 Cookie

java - 限制 jtextfield 仅接受数字?

java - 无法解析类型 org.springframework.context.ApplicationContextAware。它是从所需的 .class 文件中间接引用的

validation - asp.net mvc 3 在模型上运行验证

JQuery 多个复选框组验证

java - 如何处理许多慢速连接

java - 如何将对象的一个​​元素转换为实例数组?

java - 验证 Controller 上的字段(作为请求正文),但不将其保存在数据库中

java - 如何更改 hdiv 中的缓存删除策略

c# - 是否有验证用户输入的最佳实践方法?