/** * Invoke API by sending HTTP request with the given options. * * @param <T> the return type to use * @param path The sub-path of the HTTP URL * @param method The request method * @param queryParams The query parameters * @param body The request body object * @param headerParams The header parameters * @param formParams The form parameters * @param accept The request's Accept header * @param contentType The request's Content-Type header * @param authNames The authentications to apply * @param returnType The return type into which to deserialize the response * @return The response body in chosen type */ public <T> T invokeAPI(String path, HttpMethod method, MultiValueMap<String, String> queryParams, Object body, HttpHeaders headerParams, MultiValueMap<String, Object> formParams, List<MediaType> accept, MediaType contentType, String[] authNames, ParameterizedTypeReference<T> returnType) throws RestClientException { updateParamsForAuth(authNames, queryParams, headerParams); final UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(basePath).path(path); if (queryParams != null) { builder.queryParams(queryParams); } final BodyBuilder requestBuilder = RequestEntity.method(method, builder.build().toUri()); if(accept != null) { requestBuilder.accept(accept.toArray(new MediaType[accept.size()])); } if(contentType != null) { requestBuilder.contentType(contentType); } addHeadersToRequest(headerParams, requestBuilder); addHeadersToRequest(defaultHeaders, requestBuilder); RequestEntity<Object> requestEntity = requestBuilder.body(selectBody(body, formParams, contentType)); ResponseEntity<T> responseEntity = restTemplate.exchange(requestEntity, returnType); statusCode = responseEntity.getStatusCode(); responseHeaders = responseEntity.getHeaders(); if (responseEntity.getStatusCode() == HttpStatus.NO_CONTENT) { return null; } else if (responseEntity.getStatusCode().is2xxSuccessful()) { if (returnType == null) { return null; } return responseEntity.getBody(); } else { // The error handler built into the RestTemplate should handle 400 and 500 series errors. throw new RestClientException("API returned " + statusCode + " and it wasn't handled by the RestTemplate error handler"); } }
/** * Add headers to the request that is being built * @param headers The headers to add * @param requestBuilder The current request */ protected void addHeadersToRequest(HttpHeaders headers, BodyBuilder requestBuilder) { for (Entry<String, List<String>> entry : headers.entrySet()) { List<String> values = entry.getValue(); for(String value : values) { if (value != null) { requestBuilder.header(entry.getKey(), value); } } } }
private BodyBuilder headers(BodyBuilder builder) { Set<String> sensitive = this.sensitive; if (sensitive == null) { sensitive = DEFAULT_SENSITIVE; } proxy(); for (String name : headers.keySet()) { if (sensitive.contains(name.toLowerCase())) { continue; } builder.header(name, headers.get(name).toArray(new String[0])); } return builder; }
private BodyBuilder deployRequest(DeployableArtifact artifact) throws IOException { URI uri = UriComponentsBuilder.fromUriString(this.uri).path(this.repositoryName) .path(artifact.getPath()) .path(buildMatrixParams(artifact.getProperties())) .buildAndExpand(NO_VARIABLES).encode().toUri(); Checksums checksums = artifact.getChecksums(); return RequestEntity.put(uri).contentType(MediaType.APPLICATION_OCTET_STREAM) .header("X-Checksum-Sha1", checksums.getSha1()) .header("X-Checksum-Md5", checksums.getMd5()); }
public ResponseEntity<T> get() { RequestEntity<?> requestEntity = headers((BodyBuilder) RequestEntity.get(uri)) .build(); return exchange(requestEntity); }
public ResponseEntity<T> head() { RequestEntity<?> requestEntity = headers((BodyBuilder) RequestEntity.head(uri)) .build(); return exchange(requestEntity); }
public ResponseEntity<T> options() { RequestEntity<?> requestEntity = headers((BodyBuilder) RequestEntity.options(uri)) .build(); return exchange(requestEntity); }
public ResponseEntity<T> delete() { RequestEntity<Void> requestEntity = headers( (BodyBuilder) RequestEntity.delete(uri)).build(); return exchange(requestEntity); }