โ๏ธ ๋ฌธ์ ์ํฉ
Feign Client ์ธํฐํ์ด์ค ๋ฉ์๋์ @RequestHeader("X-User-Id) ๋์ ์ฌ์ฉํ ์ ์๋ ์ปค์คํ ์ด๋ ธํ ์ด์ ์ ์์ฑํ์ฌ,
@CurrentUserId ๋ฅผ ํตํด ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ฌ ๋น๋๊ฐ ์คํจํ๋ค.
Method has too many Body parameters
์๋ ์ฝ๋์ ๊ฐ์ด ์ปค์คํ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด์ ํค๋๋ฅผ ์ ๋ฌํ๊ฒ ๋๋ฉด, ์ปค์คํ ์ด๋ ธํ ์ด์ ์ด ๋ฌด์๋๋ฉด์ userId๊น์ง @RequestBody๋ก ์ธ์์ด ๋์ด ๋ฌธ์ ๊ฐ ์๊ธด ๊ฒ์ด๋ค. (Body ํ๋ผ๋ฏธํฐ๊ฐ 2๊ฐ ์ด์์ด ๋จ)
@FeignClient(name = "order-service")
public interface OrderFeignClient {
@PostMapping
OrderCreateResponse createOrder(
@CurrentUserId Long userId,
@RequestBody OrderCreateRequest request);
}
โ๏ธ ์์ธ
Feign Client๋ Spring ArgumentResolver๋ฅผ ์ง์ํ์ง ์๊ธฐ๋๋ฌธ์,
@CurrentUserId ์ ๊ฐ์ด ์ปค์คํ ํ ๋ฆฌ์กธ๋ฒ ๊ธฐ๋ฐ ์ด๋ ธํ ์ด์ ์ด ์๋ํ์ง ์๋๋ค.
๋ํ Feign Client๋ก ํ๋์ RequestBody๋ง ์ ๋ฌ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ ์ ๋ฐ์ ์๋ ์ํฉ์ด ๋ ๊ฒ์ด๋ค.
โ๏ธ ํด๊ฒฐ ๋ฐฉ๋ฒ
Feign Client์์๋ @RequestHeader ๋ฅผ ์ง์ ๋ช ์ํ์ฌ ์ฌ์ฉํ๋ค.
@FeignClient(name = "order-service")
public interface OrderFeignClient {
@PostMapping
OrderCreateResponse createOrder(
@RequestHeader("X-User-Id") Long userId,
@RequestBody OrderCreateRequest request);
}
๋ํ ์ปค์คํ ์ด๋ ธํ ์ด์ ์ Controller Class์์ ๋ฐ์์ฌ๋๋ง ์ฌ์ฉํ๋ค.
โจ ๊ฒฐ๋ก
Feign Client๋ ArgumentResolver๋ฅผ ๋ชจ๋ฅด๊ธฐ๋๋ฌธ์, Header OR parameter ๋ ์ง์ ์ ์ธํด์ ์จ์ผํ๋ค.