@KafkaListener @Payload验证

从2.2版本开始,现在添加验证器验证@KafkaListener @Payload参数。 以前,你必须配置自定义DefaultMessageHandlerMethodFactory然后把它添加到注册商。 现在,你可以把验证器添加到注册商本身。 以下代码展示了如何实现:spring-doc.cadn.net.cn

@Configuration
@EnableKafka
public class Config implements KafkaListenerConfigurer {

    ...

    @Override
    public void configureKafkaListeners(KafkaListenerEndpointRegistrar registrar) {
      registrar.setValidator(new MyValidator());
    }

}
当你使用带有验证Starters的 Spring Boot 时,LocalValidatorFactoryBean是自动配置的,如下示例所示:
@Configuration
@EnableKafka
public class Config implements KafkaListenerConfigurer {

    @Autowired
    private LocalValidatorFactoryBean validator;
    ...

    @Override
    public void configureKafkaListeners(KafkaListenerEndpointRegistrar registrar) {
      registrar.setValidator(this.validator);
    }
}

以下示例展示了如何验证:spring-doc.cadn.net.cn

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在一门课上.spring-doc.cadn.net.cn

从3.1版本开始,你可以在ErrorHandlingDeserializer相反。 看ErrorHandlingDeserializer更多信息请见。spring-doc.cadn.net.cn