우리는 Spring Boot (모든 최신 버전)와 함께 Spring Kafka를 사용합니다. 우리는 Kafka 메시지 처리를 @KafkaHandler
어노테이션 처리 된 메서드 로 전환 했으며 @Valid
/ @Validated
함께 @Payload
페이로드 유효성 검사를 보장 할 것으로 예상 했지만, 그렇게되지 않았습니다. 이 기능은 @KafkaListener
에서도 작동 @KafkaHandler
합니까?
@KafkaListener(...)
@Component
public class NotificationListener {
@KafkaHandler
public void handleV1(@Payload @Valid NotificationV1 notification) {
감사합니다.
는 Validator
우리가 단지에 도달하지 않기 때문에이 경우에는 적용되지 않습니다 PayloadMethodArgumentResolver
그 목적을 위해.
호출 할 메서드를 확실히 알아야하기 때문에 메서드를 호출 하기 전에 다중 메서드의 대상 페이로드 @KafkaListener
가 해결 됩니다. 이러한 논리는 다음에서 수행됩니다 .InvocableHandlerMethod.getMethodArgumentValues()
args[i] = findProvidedArgument(parameter, providedArgs);
if (args[i] != null) {
continue;
}
...
try {
args[i] = this.resolvers.resolveArgument(parameter, message);
}
Validator
기능들에서 이루어집니다 resolvers
. 는 findProvidedArgument()
페이로드를 실행하기 전에 변환 여기에 우리가 매개 변수에 어떤 어노테이션을 확인하지 않는 우리를 제공합니다.
DelegatingInvocableHandler
핸들러를 선택했을 때와 호출 전에 유효성 검사 로직을 폴링해야 할 것입니다 .
GitHub 문제를 자유롭게 제기 할 수 있으므로이 문제를 어떻게 든 해결해야한다는 사실을 잊지 마십시오.