본문 바로가기

삽질

Feign Client Decode Exception

Feign Client로 요청을 보내는데, 디코딩을 할 수 없다는 예외가 발생했습니다.

import com.sdi.work_order.client.response.JigItemResponseDto;
import com.sdi.work_order.util.Response;

@FeignClient(name = "jigItemClient", url = "${api-base-url}")
public interface JigItemClient {
    @GetMapping("/jig-item")
    Response<JigItemResponseDto> findBySerialNo(@RequestParam(name = "serial-no") String serialNo);
}

FeignClient는 기본 생성자가 필요합니다.

JigItemResponseDto는 record 타입이라, 기본 생성자가 이미 있습니다.

public record JigItemResponseDto(
        String model,
        String serialNo,
        List<JigCheckItem> checkList
) {}

혹시나 하는 마음에,

FeignClient 말고 RestTemplate을 직접적으로 써도 HttpMessageConversionException가 발생했습니다.

똑같이 기본 생성자가 없어서 발생하는 예외입니다.

org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.sdi.work_order.util.Response]

예외를 자세히 읽어보니 직접 만든 Response가 문제라는 것을 알게 되었습니다.

JigItemResponseDto는 기본 생성자가 있지만, Response에는 기본 생성자가 없습니다.

@Getter
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class Response<T> {
    ...
}

기본 생성자를 추가해주니 잘 되었습니다.

@Getter
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Response<T> {
    ...
}

결론. 에러 코드를 잘 읽자;;;;;

닉값(삽질)만 하다가 하루를 날렸어요 ㅠ