@KafkaListener
@Payload
Validation
从 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 与验证启动器一起使用时,它会自动配置一个 |
@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
on a Class。
从版本 3.1 开始,您可以转而执行一个 ErrorHandlingDeserializer
中的验证。详见 xref:kafka/serdes.adoc#error-handling-deserializer[Using ErrorHandlingDeserializer
。