@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
を使用する " を参照してください。