본문 바로가기

Lang

[Java] FeignClient, no suitable HttpMessageConverter 에러

FastAPI 로 테스트용 API 서버 만들고 Spring Boot, Feign 이용해서 Rest Client 구현해서 기능 테스트는 마친 상태.
업체에서 API 테스트 서버 드디어 오픈했다고 연락와서 실제 연동 테스트 시작했는데 시작하자마자 에러 발생.

13:47:06.924 [http-nio-8080-exec-3] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet](DirectJDKLog.java:175) - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is feign.codec.DecodeException: Could not extract response: no suitable HttpMessageConverter found for response type [...] and content type [text/plain;charset=UTF-8]] with root cause ...
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:126)
at org.springframework.cloud.openfeign.support.SpringDecoder.decode(SpringDecoder.java:57)
at org.springframework.cloud.openfeign.support.ResponseEntityDecoder.decode(ResponseEntityDecoder.java:61) at feign.optionals.OptionalDecoder.decode(OptionalDecoder.java:36)
at feign.AsyncResponseHandler.decode(AsyncResponseHandler.java:115)
...

'no suitable HttpMessageConverter found for response type ...' 란 부분 보고 메시지 디코딩 별도 구현해야 하나 싶었는데 찾다보니 의외로 간단하게 처리되는 문제였음.

@FeignClient(name="ROS-API", url="${rest-api.host}")
public interface RosClient {
    // 기존 
    @GetMapping("${rest-url.ros0101}")
    Ros0101 getBlocks(@PathVariable("id") String id);


    // 수정 
    @GetMapping(value = "${rest-url.ros0101}", produces = "application/json")
    Ros0101 getBlocks(@PathVariable("id") String id);

    ...
}

기록하고 보니 진짜 별거 아니지만 그래도 기념으로 ㅎ