Spring

@KafkaHandler의 @Valid @Payload – 버그 또는 누락 된 기능?

기록만이살길 2021. 3. 19. 15:05
반응형

@KafkaHandler의 @Valid @Payload – 버그 또는 누락 된 기능?

1. 질문(문제점):

우리는 Spring Boot (모든 최신 버전)와 함께 Spring Kafka를 사용합니다. 우리는 Kafka 메시지 처리를 @KafkaHandler어노테이션 처리 된 메서드 로 전환 했으며 @Valid/ @Validated함께 @Payload페이로드 유효성 검사를 보장 할 것으로 예상 했지만, 그렇게되지 않았습니다. 이 기능은 @KafkaListener에서도 작동 @KafkaHandler합니까?

@KafkaListener(...)
@Component
public class NotificationListener {

    @KafkaHandler
    public void handleV1(@Payload @Valid NotificationV1 notification) {

감사합니다.

2. 해결방안:

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 문제를 자유롭게 제기 할 수 있으므로이 문제를 어떻게 든 해결해야한다는 사실을 잊지 마십시오.

65645415
반응형