@Override public boolean equals(@Nullable Object other) { if (this == other) { return true; } if (!super.equals(other)) { return false; } RequestEntity<?> otherEntity = (RequestEntity<?>) other; return (ObjectUtils.nullSafeEquals(getMethod(), otherEntity.getMethod()) && ObjectUtils.nullSafeEquals(getUrl(), otherEntity.getUrl())); }
@Override public String toString() { StringBuilder builder = new StringBuilder("<"); builder.append(getMethod()); builder.append(' '); builder.append(getUrl()); builder.append(','); T body = getBody(); HttpHeaders headers = getHeaders(); if (body != null) { builder.append(body); builder.append(','); } builder.append(headers); builder.append('>'); return builder.toString(); }
@Override public boolean equals(@Nullable Object other) { if (this == other) { return true; } if (!super.equals(other)) { return false; } RequestEntity<?> otherEntity = (RequestEntity<?>) other; return (ObjectUtils.nullSafeEquals(getMethod(), otherEntity.getMethod()) && ObjectUtils.nullSafeEquals(getUrl(), otherEntity.getUrl())); }
@Override public String toString() { StringBuilder builder = new StringBuilder("<"); builder.append(getMethod()); builder.append(' '); builder.append(getUrl()); builder.append(','); T body = getBody(); HttpHeaders headers = getHeaders(); if (body != null) { builder.append(body); builder.append(','); } builder.append(headers); builder.append('>'); return builder.toString(); }
@Override public <T> ResponseEntity<T> exchange(RequestEntity<?> requestEntity, Class<T> responseType) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(requestEntity, responseType); ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType); return nonNull(doExecute(requestEntity.getUrl(), requestEntity.getMethod(), requestCallback, responseExtractor)); }
@Override public <T> ResponseEntity<T> exchange(RequestEntity<?> requestEntity, ParameterizedTypeReference<T> responseType) throws RestClientException { Type type = responseType.getType(); RequestCallback requestCallback = httpEntityCallback(requestEntity, type); ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(type); return nonNull(doExecute(requestEntity.getUrl(), requestEntity.getMethod(), requestCallback, responseExtractor)); }
@Override public <T> ResponseEntity<T> exchange(RequestEntity<?> requestEntity, Class<T> responseType) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(requestEntity, responseType); ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(responseType); return nonNull(doExecute(requestEntity.getUrl(), requestEntity.getMethod(), requestCallback, responseExtractor)); }
@Override public <T> ResponseEntity<T> exchange(RequestEntity<?> requestEntity, ParameterizedTypeReference<T> responseType) throws RestClientException { Type type = responseType.getType(); RequestCallback requestCallback = httpEntityCallback(requestEntity, type); ResponseExtractor<ResponseEntity<T>> responseExtractor = responseEntityExtractor(type); return nonNull(doExecute(requestEntity.getUrl(), requestEntity.getMethod(), requestCallback, responseExtractor)); }
@Test public void uriVariablesExpansion() throws URISyntaxException { URI uri = new UriTemplate("http://example.com/{foo}").expand("bar"); RequestEntity.get(uri).accept(MediaType.TEXT_PLAIN).build(); String url = "http://www.{host}.com/{path}"; String host = "example"; String path = "foo/bar"; URI expected = new URI("http://www.example.com/foo/bar"); uri = new UriTemplate(url).expand(host, path); RequestEntity<?> entity = RequestEntity.get(uri).build(); assertEquals(expected, entity.getUrl()); Map<String, String> uriVariables = new HashMap<>(2); uriVariables.put("host", host); uriVariables.put("path", path); uri = new UriTemplate(url).expand(uriVariables); entity = RequestEntity.get(uri).build(); assertEquals(expected, entity.getUrl()); }
@SuppressWarnings("unchecked") @Test public void convertWhenGrantRequestValidThenConverts() { RequestEntity<?> requestEntity = this.converter.convert(this.clientCredentialsGrantRequest); ClientRegistration clientRegistration = this.clientCredentialsGrantRequest.getClientRegistration(); assertThat(requestEntity.getMethod()).isEqualTo(HttpMethod.POST); assertThat(requestEntity.getUrl().toASCIIString()).isEqualTo( clientRegistration.getProviderDetails().getTokenUri()); HttpHeaders headers = requestEntity.getHeaders(); assertThat(headers.getAccept()).contains(MediaType.APPLICATION_JSON_UTF8); assertThat(headers.getContentType()).isEqualTo( MediaType.valueOf(APPLICATION_FORM_URLENCODED_VALUE + ";charset=UTF-8")); assertThat(headers.getFirst(HttpHeaders.AUTHORIZATION)).startsWith("Basic "); MultiValueMap<String, String> formParameters = (MultiValueMap<String, String>) requestEntity.getBody(); assertThat(formParameters.getFirst(OAuth2ParameterNames.GRANT_TYPE)).isEqualTo( AuthorizationGrantType.CLIENT_CREDENTIALS.getValue()); assertThat(formParameters.getFirst(OAuth2ParameterNames.SCOPE)).isEqualTo("read write"); } }
@SuppressWarnings("unchecked") @Test public void convertWhenGrantRequestValidThenConverts() { RequestEntity<?> requestEntity = this.converter.convert(this.authorizationCodeGrantRequest); ClientRegistration clientRegistration = this.authorizationCodeGrantRequest.getClientRegistration(); assertThat(requestEntity.getMethod()).isEqualTo(HttpMethod.POST); assertThat(requestEntity.getUrl().toASCIIString()).isEqualTo( clientRegistration.getProviderDetails().getTokenUri()); HttpHeaders headers = requestEntity.getHeaders(); assertThat(headers.getAccept()).contains(MediaType.APPLICATION_JSON_UTF8); assertThat(headers.getContentType()).isEqualTo( MediaType.valueOf(APPLICATION_FORM_URLENCODED_VALUE + ";charset=UTF-8")); assertThat(headers.getFirst(HttpHeaders.AUTHORIZATION)).startsWith("Basic "); MultiValueMap<String, String> formParameters = (MultiValueMap<String, String>) requestEntity.getBody(); assertThat(formParameters.getFirst(OAuth2ParameterNames.GRANT_TYPE)).isEqualTo( AuthorizationGrantType.AUTHORIZATION_CODE.getValue()); assertThat(formParameters.getFirst(OAuth2ParameterNames.CODE)).isEqualTo("code-1234"); assertThat(formParameters.getFirst(OAuth2ParameterNames.REDIRECT_URI)).isEqualTo( clientRegistration.getRedirectUriTemplate()); } }
@SuppressWarnings("unchecked") @Test public void convertWhenAuthenticationMethodHeaderThenGetRequest() { ClientRegistration clientRegistration = TestClientRegistrations.clientRegistration().build(); OAuth2UserRequest userRequest = new OAuth2UserRequest( clientRegistration, this.createAccessToken()); RequestEntity<?> requestEntity = this.converter.convert(userRequest); assertThat(requestEntity.getMethod()).isEqualTo(HttpMethod.GET); assertThat(requestEntity.getUrl().toASCIIString()).isEqualTo( clientRegistration.getProviderDetails().getUserInfoEndpoint().getUri()); HttpHeaders headers = requestEntity.getHeaders(); assertThat(headers.getAccept()).contains(MediaType.APPLICATION_JSON); assertThat(headers.getFirst(HttpHeaders.AUTHORIZATION)).isEqualTo( "Bearer " + userRequest.getAccessToken().getTokenValue()); }
@SuppressWarnings("unchecked") @Test public void convertWhenAuthenticationMethodFormThenPostRequest() { ClientRegistration clientRegistration = TestClientRegistrations.clientRegistration() .userInfoAuthenticationMethod(AuthenticationMethod.FORM) .build(); OAuth2UserRequest userRequest = new OAuth2UserRequest( clientRegistration, this.createAccessToken()); RequestEntity<?> requestEntity = this.converter.convert(userRequest); assertThat(requestEntity.getMethod()).isEqualTo(HttpMethod.POST); assertThat(requestEntity.getUrl().toASCIIString()).isEqualTo( clientRegistration.getProviderDetails().getUserInfoEndpoint().getUri()); HttpHeaders headers = requestEntity.getHeaders(); assertThat(headers.getAccept()).contains(MediaType.APPLICATION_JSON); assertThat(headers.getContentType()).isEqualTo( MediaType.valueOf(APPLICATION_FORM_URLENCODED_VALUE + ";charset=UTF-8")); MultiValueMap<String, String> formParameters = (MultiValueMap<String, String>) requestEntity.getBody(); assertThat(formParameters.getFirst(OAuth2ParameterNames.ACCESS_TOKEN)).isEqualTo( userRequest.getAccessToken().getTokenValue()); }
@Override public <T> ResponseEntity<T> exchange(RequestEntity<?> requestEntity, ParameterizedTypeReference<T> responseType) throws RestClientException { return getRestTemplate(requestEntity.getUrl()).exchange(requestEntity, responseType); }
@Test public void headers() throws URISyntaxException { MediaType accept = MediaType.TEXT_PLAIN; long ifModifiedSince = 12345L; String ifNoneMatch = "\"foo\""; long contentLength = 67890; MediaType contentType = MediaType.TEXT_PLAIN; RequestEntity<Void> responseEntity = RequestEntity.post(new URI("http://example.com")). accept(accept). acceptCharset(StandardCharsets.UTF_8). ifModifiedSince(ifModifiedSince). ifNoneMatch(ifNoneMatch). contentLength(contentLength). contentType(contentType). build(); assertNotNull(responseEntity); assertEquals(HttpMethod.POST, responseEntity.getMethod()); assertEquals(new URI("http://example.com"), responseEntity.getUrl()); HttpHeaders responseHeaders = responseEntity.getHeaders(); assertEquals("text/plain", responseHeaders.getFirst("Accept")); assertEquals("utf-8", responseHeaders.getFirst("Accept-Charset")); assertEquals("Thu, 1 Jan 1970 00:00:12 GMT", responseHeaders.getFirst("If-Modified-Since")); assertEquals(ifNoneMatch, responseHeaders.getFirst("If-None-Match")); assertEquals(String.valueOf(contentLength), responseHeaders.getFirst("Content-Length")); assertEquals(contentType.toString(), responseHeaders.getFirst("Content-Type")); assertNull(responseEntity.getBody()); }
@Test public void shouldResolveRequestEntityArgument() throws Exception { String body = "Foo"; MediaType contentType = TEXT_PLAIN; servletRequest.addHeader("Content-Type", contentType.toString()); servletRequest.setMethod("GET"); servletRequest.setServerName("www.example.com"); servletRequest.setServerPort(80); servletRequest.setRequestURI("/path"); servletRequest.setContent(body.getBytes(StandardCharsets.UTF_8)); given(stringHttpMessageConverter.canRead(String.class, contentType)).willReturn(true); given(stringHttpMessageConverter.read(eq(String.class), isA(HttpInputMessage.class))).willReturn(body); Object result = processor.resolveArgument(paramRequestEntity, mavContainer, webRequest, null); assertTrue(result instanceof RequestEntity); assertFalse("The requestHandled flag shouldn't change", mavContainer.isRequestHandled()); RequestEntity<?> requestEntity = (RequestEntity<?>) result; assertEquals("Invalid method", HttpMethod.GET, requestEntity.getMethod()); // using default port (which is 80), so do not need to append the port (-1 means ignore) URI uri = new URI("http", null, "www.example.com", -1, "/path", null, null); assertEquals("Invalid url", uri, requestEntity.getUrl()); assertEquals("Invalid argument", body, requestEntity.getBody()); }
@Override public <T> ResponseEntity<T> exchange(RequestEntity<?> requestEntity, Class<T> responseType) throws RestClientException { return getRestTemplate(requestEntity.getUrl()).exchange(requestEntity, responseType); }
@Test public void requestEntity() throws Exception { ServerWebExchange exchange = postExchange("line1"); ResolvableType type = forClassWithGenerics(RequestEntity.class, String.class); RequestEntity<String> requestEntity = resolveValue(exchange, type); assertEquals(exchange.getRequest().getMethod(), requestEntity.getMethod()); assertEquals(exchange.getRequest().getURI(), requestEntity.getUrl()); assertEquals(exchange.getRequest().getHeaders(), requestEntity.getHeaders()); assertEquals("line1", requestEntity.getBody()); }
private Mono<ResponseEntity<T>> exchange(RequestEntity<?> requestEntity) { Type type = this.responseType; RequestBodySpec builder = rest.method(requestEntity.getMethod()) .uri(requestEntity.getUrl()) .headers(headers -> addHeaders(headers, requestEntity.getHeaders())); Mono<ClientResponse> result; if (requestEntity.getBody() instanceof Publisher) { @SuppressWarnings("unchecked") Publisher<Object> publisher = (Publisher<Object>) requestEntity.getBody(); result = builder.body(publisher, Object.class).exchange(); } else if (requestEntity.getBody() != null) { result = builder.body(BodyInserters.fromObject(requestEntity.getBody())) .exchange(); } else { if (hasBody) { result = builder.headers( headers -> addHeaders(headers, exchange.getRequest().getHeaders())) .body(exchange.getRequest().getBody(), DataBuffer.class) .exchange(); } else { result = builder.headers( headers -> addHeaders(headers, exchange.getRequest().getHeaders())) .exchange(); } } return result.flatMap(response -> response.toEntity(ParameterizedTypeReference.forType(type))); }
httpEntity.getUrl().toString()) .setHeader(org.springframework.integration.http.HttpHeaders.USER_PRINCIPAL, servletRequest.getUserPrincipal())