@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 與驗證啟動器搭配使用時,會自動設定 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
。