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