|
该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用 Spring for Apache Kafka 4.0.0! |
@KafkaListener @Payload验证
从2.2版本开始,现在添加验证器验证@KafkaListener @Payload参数。 以前,你必须配置自定义DefaultMessageHandlerMethodFactory并把它添加到注册商中。现在,你可以把验证器添加到注册商本身。以下代码展示了如何做到这一点:
@Configuration
@EnableKafka
public class Config implements KafkaListenerConfigurer {
...
@Override
public void configureKafkaListeners(KafkaListenerEndpointRegistrar registrar) {
registrar.setValidator(new MyValidator());
}
}
当你使用带有验证Starters的 Spring Boot 时,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更多信息请见。