Spring Web Client에서 여러 헤더를 동시에 설정하는 방법
나머지 클라이언트에 머리글을 설정하려고 했는데 매번 다음 명령을 써야 합니다.
webclient.get().uri("blah-blah")
.header("key1", "value1")
.header("key2", "value2")...
headers() 메서드를 사용하여 모든 헤더를 동시에 설정하려면 어떻게 해야 합니까?
이러한 헤더가 요청별로 변경될 경우 다음을 사용할 수 있습니다.
webClient.get().uri("/resource").headers(httpHeaders -> {
httpHeaders.setX("");
httpHeaders.setY("");
});
이렇게 하면 입력이 크게 절약되지 않으므로 요청 간에 변경되지 않는 헤더의 경우 클라이언트를 빌드할 때 이러한 헤더를 기본 헤더로 설정할 수 있습니다.
WebClient webClient = WebClient.builder().defaultHeader("...", "...").build();
WebClient webClient = WebClient.builder().defaultHeaders(httpHeaders -> {
httpHeaders.setX("");
httpHeaders.setY("");
}).build();
헤더를 사용한 작업을 마친 후 Web Client 구축에서 추가 fluent-composition 메서드 호출을 계속할 수 있다는 점에서 시각화하는 것은 어렵지만 소비자가 옳습니다.
......범위에 헤더를 보관하고 있는HttpHeaders(또는 MutliValue 맵)가 있다고 가정합니다.다음은 스프링 클라우드 게이트웨이에서 Exchange 개체를 사용하는 예입니다.
final HttpHeaders headersFromExchangeRequest = exchange.getRequest().headers();
webclient.get().uri("blah-blah")
.headers( httpHeadersOnWebClientBeingBuilt -> {
httpHeadersOnWebClientBeingBuilt.addAll( headersFromExchangeRequest );
}
)...
addAll은 다중값 맵을 사용할 수 있습니다.이것이 타당하다면 IDE를 가이드로 해 주세요.
소비자를 명확하게 하기 위해서, 상기의 내용을 다음과 같이 고쳐 씁니다.
private Consumer<HttpHeaders> getHttpHeadersFromExchange(ServerWebExchange exchange) {
return httpHeaders -> {
httpHeaders.addAll(exchange.getRequest().getHeaders());
};
}
.
.
.
webclient.get().uri("blah-blah")
.headers(getHttpHeadersFromExchange(exchange))
...
저는 이 문제가 다시 제기되어 이번에는 WebClient를 사용하여 직접 groovy를 작성했습니다.다시 말씀드리지만, 이 예에서는 Consumer를 헤더 메서드 호출의 인수로 사용하고 있습니다.
그루비에서는 그루비 클로저 구문과 자바 람다 구문이 모두 사용된다는 추가 문제가 있습니다.->
groovy 버전은 다음과 같습니다.
def mvmap = new LinkedMultiValueMap<>(headersAsMap)
def consumer = { it -> it.addAll(mvmap) } as Consumer<HttpHeaders>
WebClient client = WebClient.create(baseUrlAsString)
def resultAsMono = client.post()
.uri(uriAsString).accept(MediaType.APPLICATION_JSON)
.headers(consumer)
.body(Mono.just(payload), HashMap.class)
.retrieve()
.toEntity(HashMap.class)
Java 버전은 다음과 같습니다.
LinkedMultiValueMap mvmap = new LinkedMultiValueMap<>(headersAsMap);
Consumer<HttpHeaders> consumer = it -> it.addAll(mvmap);
WebClient client = WebClient.create(baseUrlAsString);
Mono<ResponseEntity<HashMap>> resultAsMono = client.post()
.uri(uriAsString).accept(MediaType.APPLICATION_JSON)
.headers(consumer)
.body(Mono.just(payload), HashMap.class)
.retrieve()
.toEntity(HashMap.class);
스프링 부트 중2.7.5
:
webClient
.get()
.uri("blah-blah")
.headers(
httpHeaders -> {
httpHeaders.set("key1", "value1");
httpHeaders.set("key2", "value2");
})
언급URL : https://stackoverflow.com/questions/59133508/how-to-set-multiple-headers-at-once-in-spring-webclient
'programing' 카테고리의 다른 글
XAML에서 이중 따옴표와 단일 따옴표가 포함된 텍스트를 표시하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
---|---|
Windows에 OpenJDK 11을 설치하는 방법 (0) | 2023.04.09 |
json 다운로드 및 빠른 구문 분석 (0) | 2023.04.04 |
대응: Axios 네트워크 오류 (0) | 2023.04.04 |
컨트롤러가 모듈 내에 있는 경우 AngularJs $scope가 정의되지 않았습니다. (0) | 2023.04.04 |