@KafkaListener @Payload 驗證
從版本 2.2 開始,現在可以更輕鬆地為 @KafkaListener @Payload 引數新增 Validator 進行驗證。以前,您必須配置一個自定義的 DefaultMessageHandlerMethodFactory 並將其新增到註冊器中。現在,您可以將驗證器直接新增到註冊器本身。以下程式碼顯示瞭如何操作:
@Configuration
@EnableKafka
public class Config implements KafkaListenerConfigurer {
...
@Override
public void configureKafkaListeners(KafkaListenerEndpointRegistrar registrar) {
registrar.setValidator(new MyValidator());
}
}
當您使用 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。