기타/문제 해결

fegin client GET 메서드 요청 시 오류 해결

펭귄힝 2024. 6. 17. 16:38

 

이 게시물에서는 마이크로서비스들끼리 FeignClient를 이용해 통신을 구현하던 중 만나게된 FeignException$MethodNotAllowed 예외를 해결한 과정을 기록한다.

 

 

 

 

 

 

 

member 서비스의 API를 GET 방식으로 요청하는 FeignClient 코드이다. JSON 데이터를 전송한다.

이 서비스의 이름을 Request-Service 로 지칭하겠다.

 

 

 

 

 

 

member-service 의 코드이다. JSON 형식으로 받아서 처리하도록 해놓았다.

이 서비스의 이름을 Response-Service 로 지칭하겠다.

 

 

그런데 실제 동작을 해보면 아래와 같은 예외가 발생한다.

 

 

Request-Service

feign.FeignException$MethodNotAllowed: [405] during [GET] to ~~

 

 

 

 

Response-Service

[org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' is not supported

 

 

 

 

 

예외 내용을 구글링해보니 StackOverFlow에서 다음 게시물을 만나볼 수 있었다.

 

https://stackoverflow.com/questions/58468968/feign-client-get-request-throws-method-not-allowed-request-method-post-not

 

Feign Client GET request, throws "Method Not Allowed: Request method 'POST' not supported" from microservice

I have a Vue.js app with a spring backend, which makes calls via a Feign Client to an 'orders' microservice. I have many GET requests that are working fine using @PathVariable(s), but I have 1 GET

stackoverflow.com

 

 

 

 

정리하자면 요청 과정에서 메시지 바디에 어떤 내용이 들어가있으면 이를 POST 방식으로 변경해서 요청을 처리한다는 내용이다.

따라서, 지금 위 코드는 Request-Service에서 JSON 의 데이터를 메시지 바디에 담고 GET 방식으로 요청하라고 되어있지만 사실상 Response-Service 입장에서는 POST 방식으로 요청을 받고 있었던 것이다.

 

이를 해결하기 위해서 아래와 같은 방법을 나열해볼 수 있다.

 

1. Response-Service 의 API 를 POST 방식으로 받도록 해놓는다.

 

2. Request-Service 의 JSON 데이터를 파라미터로 넘겨준다.

 

 

이 중 1번 방법의 경우는 웹 메서드의 목적을 달리하기 때문에 채택하지 않았고,

 

 

 

2번 방법을 사용해 명시적으로 파라미터 이름을 지정해줌으로써 JSON 대신 파라미터로 값을 전달하도록 해주었다.