spring-kafka - 在 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);
}
.....
解决方案
目前功能模型不支持此功能。即使对于非功能性场景,这对于像KStream
. 您上面提到的KafkaListenerConfigurer
内容适用于带有消息通道绑定器的常规 Kafka 支持。Kafka Streams binder 的最佳选择是在继续处理之前在函数本身中使用一些自定义验证,或者引入模式注册表,然后在将记录传递给函数之前执行模式验证。
推荐阅读
- linux - FAT 系统:msdos_create 和 msdos_mkdir 之间的区别
- c# - System.Windows.Input.Key 在 c# 中不起作用
- r - 每组 n 行的比例选择
- python - 使用 hadoop 3.2 安装 Pyspark 3.0+,df.write 错误
- php - Laravel PHP:从递归函数中获取值
- php - 教义外键约束本地表为空
- html - 如何在不呈现 HTML 本身的情况下引用 HTML 片段?
- apache-spark - 我们可以在单个系统中同时设置 Spark2.4 和 Spark3.0 吗?
- vue.js - Vue.js + Vuetify:如何在“v-list-item”及其内容之间同步数据
- python - OpenCV Pytesseract "cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)" 请给我答案