跳到主要内容
版本:4.1.1

@KafkaListener @Payload 校验

Doubao 中英对照 @KafkaListener @Payload Validation

从版本 2.2 开始,添加 Validator 来校验 @KafkaListener @Payload 参数变得更加容易。以前,你必须配置一个自定义的 DefaultMessageHandlerMethodFactory 并将其添加到 registrar。现在,你可以将 validator 添加到 registrar 本身。以下代码展示了如何这样做:

@Configuration
@EnableKafka
public class Config implements KafkaListenerConfigurer {

...

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

}
备注

当你将 Spring Boot 与 validation starter 一起使用时,会自动配置一个 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 方法的 payload。请参阅类上的 @KafkaListener。

从版本 3.1 开始,你可以改为在 ErrorHandlingDeserializer 中进行校验。有关详情,请参阅使用 ErrorHandlingDeserializer。