이 게시물에서는 마이크로서비스들끼리 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에서 다음 게시물을 만나볼 수 있었다.
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 대신 파라미터로 값을 전달하도록 해주었다.
'기타 > 문제 해결' 카테고리의 다른 글
Resilience4J의 CircuitBreak 호출 시 FeignClient 쿠키 값 전달 되지 않는 문제 해결 (0) | 2024.06.29 |
---|---|
Redis 를 통한 세션 동기화 (0) | 2024.06.28 |
Feign Client 를 통해 요청 시 쿠키 값 유지하기 (0) | 2024.06.13 |
QueryDSL 과 Spring Cloud 의존성 충돌 문제 (0) | 2024.06.13 |
스프링 SQL 초기 데이터 삽입 시 나타나는 문제 (1) | 2024.06.07 |