[SPRING] Feign 클라이언트 + Spring Cloud (Brixton RC2)에서 동적 값을 사용하여 @Headers 사용
SPRINGFeign 클라이언트 + Spring Cloud (Brixton RC2)에서 동적 값을 사용하여 @Headers 사용
동적 값을 헤더에 설정할 수 있습니까?
@FeignClient(name="Simple-Gateway")
interface GatewayClient {
@Headers("X-Auth-Token: {token}")
@RequestMapping(method = RequestMethod.GET, value = "/gateway/test")
String getSessionId(@Param("token") String token);
}
RequestInterceptor의 구현을 등록하면 헤더가 추가되지만 헤더 값을 동적으로 설정할 방법이 없습니다.
@Bean
public RequestInterceptor requestInterceptor() {
return new RequestInterceptor() {
@Override
public void apply(RequestTemplate template) {
template.header("X-Auth-Token", "some_token");
}
};
}
github에서 다음 문제를 발견했으며 주석 작성자 (lpborges) 중 하나가 @RequestMapping 주석의 머리글을 사용하여 비슷한 작업을 시도하고있었습니다.
https://github.com/spring-cloud/spring-cloud-netflix/issues/288
친절 감사합니다
해결법
-
==============================
1.해결 방법은 특정 주석을 대체하는 대신 @RequestHeader 주석을 사용하는 것입니다.
해결 방법은 특정 주석을 대체하는 대신 @RequestHeader 주석을 사용하는 것입니다.
@FeignClient(name="Simple-Gateway") interface GatewayClient { @RequestMapping(method = RequestMethod.GET, value = "/gateway/test") String getSessionId(@RequestHeader("X-Auth-Token") String token); }
-
==============================
2.이 예제를 가지고 @RequestHeader 대신 @HeaderParam을 사용합니다.
이 예제를 가지고 @RequestHeader 대신 @HeaderParam을 사용합니다.
import rx.Single; import javax.ws.rs.Consumes; import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; @Consumes(MediaType.APPLICATION_JSON) public interface FeignRepository { @POST @Path("/Vehicles") Single<CarAddResponse> add(@HeaderParam(HttpHeaders.AUTHORIZATION) String authorizationHeader, VehicleDto vehicleDto); }
-
==============================
3.@RequestHeader가 작동하지 않았습니다. 무엇이 일 했는가 :
@RequestHeader가 작동하지 않았습니다. 무엇이 일 했는가 :
@Headers("X-Auth-Token: {access_token}") @RequestLine("GET /orders/{id}") Order get(@Param("id") String id, @Param("access_token") String accessToken);
-
==============================
4.https://github.com/spring-cloud/spring-cloud-netflix/issues/760 https://github.com/OpenFeign/feign/#basics
https://github.com/spring-cloud/spring-cloud-netflix/issues/760 https://github.com/OpenFeign/feign/#basics
17.3 Creating Feign Clients Manually http://cloud.spring.io/spring-cloud-static/Dalston.SR4/single/spring-cloud.html#_creating_feign_clients_manually
pojo :
public class User...
서비스:
@RestController public class HelloController ... public User getUser(@RequestParam("name") String name) { User user = new User(); user.setName(name + "[result]"); System.out.println("name: " + name); return user; } ...
고객:
public interface HelloClient { @RequestLine("POST /getUser?name={name}") User getUser(@Param("name") String name); }
용도:
import feign.codec.Decoder; import feign.codec.Encoder; import feign.Client; public class Demo { private HelloClient helloClient; @Autowired public Demo(Decoder decoder, Encoder encoder, Client client) { this.userAnotherService = Feign.builder().client(client) .encoder(encoder) .decoder(decoder) // for spring security .requestInterceptor(new BasicAuthRequestInterceptor("username", "password")) .target(UserAnotherService.class, "http://your-service-name"); } ... ...method... // output --> hello spring cloud![result] System.out.println(helloClient.getUser("hello spring cloud!").getName()); ...
from https://stackoverflow.com/questions/37066331/using-headers-with-dynamic-values-in-feign-client-spring-cloud-brixton-rc2 by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring AOP && MVC로 주문하기 (0) | 2019.01.03 |
---|---|
[SPRING] 분리 된 엔터티가 지속 오류를 전달했습니다. (0) | 2019.01.03 |
[SPRING] Spring 데이터 저장소에 대한 매개 변수로 추상 수퍼 클래스 사용 (0) | 2019.01.03 |
[SPRING] Spring에서 RestTemplate 사용하기. 예외 - 확장 할 수있는 변수가 충분하지 않습니다. (0) | 2019.01.03 |
[SPRING] 모든 역할 이름에 스프링 보안 접두사 "ROLE_"이 추가 되었습니까? (0) | 2019.01.03 |