삽질
Feign Client Decode Exception
ksb-dev
2024. 5. 26. 13:55
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> {
...
}
결론. 에러 코드를 잘 읽자;;;;;
닉값(삽질)만 하다가 하루를 날렸어요 ㅠ