首页 > 解决方案 > 在 sping 云流中使用 @Valid 验证 pojo

问题描述

如何在以下 kafka 消费者代码中使用@Valid启用验证?我正在使用Spring Cloud Stream (Kafka Stream binder implementation),并且在我的实现之后使用功能模型。

@Bean
public Consumer<KStream<String, @Valid Pojo>> process() {
    return messages -> messages.foreach((k, v) -> process(v));
}

我尝试了以下但它没有工作....

@Bean
public DefaultMessageHandlerMethodFactory configureMessageHandlerMethodFactory(
        DefaultMessageHandlerMethodFactory messageHandlerMethodFactory,
        LocalValidatorFactoryBean validatorFactoryBean) {       
    messageHandlerMethodFactory.setValidator(validatorFactoryBean);
    return messageHandlerMethodFactory;
}

这在 spring-kafka 中很简单,方法是实现KafkaListenerConfigurer并在KafkaListenerEndpointRegistrar上设置LocalValidatorFactoryBean

public class KafkaConfiguration implements KafkaListenerConfigurer {

@Override
public void configureKafkaListeners(KafkaListenerEndpointRegistrar registrar) {
  registrar.setValidator(validatorFactoryBean);
}
.....

标签: spring-kafkaspring-cloud-stream

解决方案


目前功能模型不支持此功能。即使对于非功能性场景,这对于像KStream. 您上面提到的KafkaListenerConfigurer内容适用于带有消息通道绑定器的常规 Kafka 支持。Kafka Streams binder 的最佳选择是在继续处理之前在函数本身中使用一些自定义验证,或者引入模式注册表,然后在将记录传递给函数之前执行模式验证。


推荐阅读