跳到主要内容

@KafkaListener @Payload 验证

ChatGPT-4o-mini 中英对照 @KafkaListener @Payload Validation @KafkaListener @Payload Validation

从版本 2.2 开始,现在更容易为 @KafkaListener@Payload 参数添加 Validator 进行验证。之前,您必须配置一个自定义的 DefaultMessageHandlerMethodFactory 并将其添加到注册器中。现在,您可以将验证器直接添加到注册器本身。以下代码展示了如何做到这一点:

@Configuration
@EnableKafka
public class Config implements KafkaListenerConfigurer {

...

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

}
java
备注

当您使用 Spring Boot 和验证启动器时,会自动配置一个 LocalValidatorFactoryBean,如下例所示:

@Configuration
@EnableKafka
public class Config implements KafkaListenerConfigurer {

@Autowired
private LocalValidatorFactoryBean validator;
...

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

以下示例展示了如何进行验证:

public static class ValidatedClass {

@Max(10)
private int bar;

public int getBar() {
return this.bar;
}

public void setBar(int bar) {
this.bar = bar;
}

}
java
@KafkaListener(id="validated", topics = "annotated35", errorHandler = "validationErrorHandler",
containerFactory = "kafkaJsonListenerContainerFactory")
public void validatedListener(@Payload @Valid ValidatedClass val) {
...
}

@Bean
public KafkaListenerErrorHandler validationErrorHandler() {
return (m, e) -> {
...
};
}
java

从版本 2.5.11 开始,验证现在适用于类级监听器中 @KafkaHandler 方法的有效负载。请参见 @KafkaListener on a Class

从版本 3.1 开始,您可以在 ErrorHandlingDeserializer 中执行验证。有关更多信息,请参见 Using ErrorHandlingDeserializer