下面列出了怎么用org.springframework.http.client.support.HttpRequestWrapper的API类实例代码及写法,或者点击链接到github查看源代码。
@DataProvider(value = {
"true | spring.asyncresttemplate",
"false | spring.resttemplate"
}, splitBy = "\\|")
@Test
public void getSpanHandlerTagValue_works_as_expected_when_request_is_an_HttpRequestWrapper(
boolean wrappedRequestIsAsyncClientHttpRequest, String expectedResult
) {
// given
HttpRequestWrapper request = mock(HttpRequestWrapper.class);
HttpRequest wrappedRequest = (wrappedRequestIsAsyncClientHttpRequest)
? mock(AsyncClientHttpRequest.class)
: mock(HttpRequest.class);
doReturn(wrappedRequest).when(request).getRequest();
// when
String result = implSpy.getSpanHandlerTagValue(request, responseMock);
// then
assertThat(result).isEqualTo(expectedResult);
}
@Override
public HttpRequest transformRequest(HttpRequest request, ServiceInstance instance) {
Map<String, String> metadata = instance.getMetadata();
if (metadata.containsKey(CF_APP_GUID) && metadata.containsKey(CF_INSTANCE_INDEX)) {
final String headerValue = String.format("%s:%s", metadata.get(CF_APP_GUID), metadata.get(CF_INSTANCE_INDEX));
// request.getHeaders might be immutable, so return a wrapper
return new HttpRequestWrapper(request) {
@Override
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.putAll(super.getHeaders());
headers.add(SURGICAL_ROUTING_HEADER, headerValue);
return headers;
}
};
}
return request;
}
@Override
public HttpRequest transformRequest(HttpRequest request, ServiceInstance instance) {
Map<String, String> metadata = instance.getMetadata();
if (metadata.containsKey(CF_APP_GUID) && metadata.containsKey(CF_INSTANCE_INDEX)) {
final String headerValue = String.format("%s:%s", metadata.get(CF_APP_GUID),
metadata.get(CF_INSTANCE_INDEX));
// request.getHeaders might be immutable, so return a wrapper
return new HttpRequestWrapper(request) {
@Override
public HttpHeaders getHeaders() {
HttpHeaders headers = new HttpHeaders();
headers.putAll(super.getHeaders());
headers.add(SURGICAL_ROUTING_HEADER, headerValue);
return headers;
}
};
}
return request;
}
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
throws IOException {
HttpRequestWrapper requestWrapper = new HttpRequestWrapper(request);
Map<String, String> contexts = SpringCloudDtsContext.getContext().getAttachments();
for (Map.Entry<String, String> entry : contexts.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
requestWrapper.getHeaders().set(CONTEXT_HEADER_PARENT + key, value);
}
return execution.execute(requestWrapper, body);
}
public ClientHttpResponse intercept(HttpRequest httpRequest, byte[] bytes, ClientHttpRequestExecution clientHttpRequestExecution) throws IOException {
HttpRequestWrapper requestWrapper = new HttpRequestWrapper(httpRequest);
String xid = RootContext.getXID();
if (StringUtils.isNotEmpty(xid)) {
requestWrapper.getHeaders().add(RootContext.KEY_XID, xid);
}
return clientHttpRequestExecution.execute(requestWrapper, bytes);
}
/**
* Intercept client http response.
*
* @param request the request
* @param body the body
* @param execution the execution
*
* @return the client http response
*
* @throws IOException the io exception
*/
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body,
ClientHttpRequestExecution execution) throws IOException {
HttpRequestWrapper requestWrapper = new HttpRequestWrapper(request);
String header = StringUtils.collectionToDelimitedString(
CoreHeaderInterceptor.LABEL.get(),
CoreHeaderInterceptor.HEADER_LABEL_SPLIT);
log.info("header={} ", header);
requestWrapper.getHeaders().add(CoreHeaderInterceptor.HEADER_LABEL, header);
return execution.execute(requestWrapper, body);
}
@Override
public ClientHttpResponse intercept(HttpRequest httpRequest, byte[] bytes,
ClientHttpRequestExecution clientHttpRequestExecution) throws IOException {
HttpRequestWrapper requestWrapper = new HttpRequestWrapper(httpRequest);
String xid = RootContext.getXID();
if (!StringUtils.isEmpty(xid)) {
requestWrapper.getHeaders().add(RootContext.KEY_XID, xid);
}
return clientHttpRequestExecution.execute(requestWrapper, bytes);
}
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
throws IOException {
HttpRequestWrapper requestWrapper = new HttpRequestWrapper(request);
HttpHeaders headers = requestWrapper.getHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
return execution.execute(requestWrapper, body);
}
/**
* Add an OAuth2 bearer token header to each request.
*
* {@inheritDoc}
*/
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
throws IOException {
HttpRequestWrapper requestWrapper = new HttpRequestWrapper(request);
HttpHeaders headers = requestWrapper.getHeaders();
headers.setBearerAuth(authorizeClient().getAccessToken().getTokenValue());
return execution.execute(requestWrapper, body);
}
@Override
public @Nullable String getSpanHandlerTagValue(@Nullable HttpRequest request, @Nullable ClientHttpResponse response) {
if (request instanceof HttpRequestWrapper) {
request = ((HttpRequestWrapper) request).getRequest();
}
if (request instanceof AsyncClientHttpRequest) {
return "spring.asyncresttemplate";
}
return "spring.resttemplate";
}
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
throws IOException {
HttpRequestWrapper wrapped = new HttpRequestWrapper(request);
wrapped.getHeaders().put("Content-Type", asList(MediaTypes.HAL_JSON_VALUE));
wrapped.getHeaders().put("Accept", asList(MediaTypes.HAL_JSON_VALUE));
return execution.execute(wrapped, body);
}
private static List<ClientHttpRequestInterceptor> createAcceptBrotliEncodingInterceptor() {
return singletonList((ClientHttpRequestInterceptor) new ClientHttpRequestInterceptor() {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
HttpRequest wrapper = new HttpRequestWrapper(request);
wrapper.getHeaders().set("Accept-Encoding", BROTLI_HTTP_CONTENT_CODING);
return execution.execute(wrapper, body);
}
});
}