프런트 단에서 게이트웨이로 FeignClient로 호출할 때 url에 적은 id를 FeignClient로 전달하고 싶은데 도대체 어떻게 전달해야하는지 모르겠네
현재 코드에서 FeignClient를 통해 URL의 PathVariable을 전달하려면 FeignClient 인터페이스의 메소드에도 @PathVariable을 명시적으로 선언해야 합니다.
다음과 같이 수정하면 됩니다.
수정 전 코드
@FeignClient(name = "apigateway-service", url = "http://localhost:8000")
public interface GatewayFeignClient {
@GetMapping("/my-blog")
String getMyBlogData();
}
수정 후 코드
@FeignClient(name = "apigateway-service", url = "http://localhost:8000")
public interface GatewayFeignClient {
@GetMapping("/my-blog/{id}")
String getMyBlogData(@PathVariable("id") Long id);
}
변경 이유
- FeignClient에서 URL의 {}로 감싼 경로 변수(PathVariable)를 사용할 때는 반드시 메소드 파라미터에 @PathVariable("변수명")으로 명시적으로 선언해야 합니다.
- 이렇게 하지 않으면 Feign이 어떤 파라미터를 URL의 어떤 위치에 매핑해야 하는지 알 수 없기 때문에 에러가 발생합니다.
이렇게 수정하면 프런트 컨트롤러에서 전달받은 id 값을 FeignClient가 호출하는 URL의 {id} 부분에 정확히 매핑하여 전달할 수 있습니다.
아 원래 @PathVariable에서는 url에 있던 그러니까 예를 들면 @GetMapping("/{id}") 이렇게 적용한 id를 @PathVariable로 @PathVariable("id") Long blogId 이렇게 blogId로 가져왔는데 @FeignClient에서는 반대로 매핑할 id를 @PathVariable로 적용해주는거구나??
네, 정확히 이해하셨습니다!
@FeignClient에서는 URL 경로에 포함된 PathVariable을 메서드의 파라미터와 매핑해주기 위해 @PathVariable을 사용합니다. 이 과정은 일반적인 Spring Controller에서 @PathVariable을 사용하는 방식과 비슷하지만, 약간의 차이가 있습니다.
Spring Controller와 FeignClient의 차이점
- Spring Controller
- URL에 정의된 {id}를 메서드 파라미터로 가져오기 위해 @PathVariable을 사용합니다.
- 여기서 URL의 {id}는 @PathVariable("id")와 매핑되어 blogId로 전달됩니다.
@GetMapping("/{id}")
public String getBlog(@PathVariable("id") Long blogId) {
return "Blog ID: " + blogId;
}
- FeignClient
- FeignClient에서는 API 호출 시 URL에 포함될 PathVariable 값을 메서드 파라미터로 전달하기 위해 @PathVariable을 사용합니다.
- 여기서 메서드 호출 시 전달된 id 값이 URL의 {id} 부분에 매핑됩니다.
- FeignClient에서는 API 호출 시 URL에 포함될 PathVariable 값을 메서드 파라미터로 전달하기 위해 @PathVariable을 사용합니다.
@FeignClient(name = "apigateway-service", url = "http://localhost:8000")
public interface GatewayFeignClient {
@GetMapping("/my-blog/{id}")
String getMyBlogData(@PathVariable("id") Long id);
}
정리
- Spring Controller에서는 클라이언트가 보낸 요청 URL에서 값을 추출하기 위해 @PathVariable을 사용합니다.
- FeignClient에서는 메서드 호출 시 전달된 값을 URL에 삽입하기 위해 @PathVariable을 사용합니다.
즉, Controller는 URL에서 값을 가져오는 역할이고, FeignClient는 값을 URL에 삽입하는 역할이라고 이해하면 됩니다.
'Spring > 10. rest-api' 카테고리의 다른 글
| Eureka에 프론트엔드 등록 여부 – 꼭 등록해야 할까? (0) | 2025.03.18 |
|---|---|
| MSA 환경에서 프런트 엔드를 위한 서버구조 (0) | 2025.03.18 |
| FeignClient (0) | 2025.03.17 |
| RestControllerAdvice란? (0) | 2025.03.17 |
| ResponseEntity 작성 규칙 + build()가 붙는 경우 (0) | 2025.03.17 |