对于最新的稳定版本,请使用 Spring for Apache Kafka 3.3.0! |
@KafkaListener
@Payload
验证
从版本 2.2 开始,现在可以更轻松地添加Validator
验证@KafkaListener
@Payload
参数。
以前,您必须配置自定义DefaultMessageHandlerMethodFactory
并将其添加到注册商。
现在,您可以将验证器添加到注册商本身。
以下代码演示如何执行此作:
@Configuration
@EnableKafka
public class Config implements KafkaListenerConfigurer {
...
@Override
public void configureKafkaListeners(KafkaListenerEndpointRegistrar registrar) {
registrar.setValidator(new MyValidator());
}
}
当您将 Spring Boot 与验证Starters一起使用时,一个LocalValidatorFactoryBean 是自动配置的,如下例所示: |
@Configuration
@EnableKafka
public class Config implements KafkaListenerConfigurer {
@Autowired
private LocalValidatorFactoryBean validator;
...
@Override
public void configureKafkaListeners(KafkaListenerEndpointRegistrar registrar) {
registrar.setValidator(this.validator);
}
}
以下示例演示如何验证:
public static class ValidatedClass {
@Max(10)
private int bar;
public int getBar() {
return this.bar;
}
public void setBar(int bar) {
this.bar = bar;
}
}
@KafkaListener(id="validated", topics = "annotated35", errorHandler = "validationErrorHandler",
containerFactory = "kafkaJsonListenerContainerFactory")
public void validatedListener(@Payload @Valid ValidatedClass val) {
...
}
@Bean
public KafkaListenerErrorHandler validationErrorHandler() {
return (m, e) -> {
...
};
}
从版本 2.5.11 开始,验证现在适用于@KafkaHandler
方法。
看@KafkaListener
在类上.
从版本 3.1 开始,您可以在ErrorHandlingDeserializer
相反。
看用ErrorHandlingDeserializer
了解更多信息。