๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์—”๋“œ/ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

Feign Client์—์„œ ์ปค์Šคํ…€ ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ์‹œ ์ฃผ์˜์‚ฌํ•ญ

by sh119 2025. 4. 21.

โœ”๏ธ ๋ฌธ์ œ์ƒํ™ฉ

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 ๋Š” ์ง์ ‘ ์„ ์–ธํ•ด์„œ ์จ์•ผํ•œ๋‹ค.