private void extract(@Nullable Class<? extends RestClientException> exceptionClass, ClientHttpResponse response) throws IOException { if (exceptionClass == null) { return; } HttpMessageConverterExtractor<? extends RestClientException> extractor = new HttpMessageConverterExtractor<>(exceptionClass, this.messageConverters); RestClientException exception = extractor.extractData(response); if (exception != null) { throw exception; } }
return null; MediaType contentType = getContentType(responseWrapper);
public ResponseEntityResponseExtractor(@Nullable Type responseType) { if (responseType != null && Void.class != responseType) { this.delegate = new HttpMessageConverterExtractor<>(responseType, getMessageConverters(), logger); } else { this.delegate = null; } }
@Override public ResponseEntity<T> extractData(ClientHttpResponse response) throws IOException { if (this.delegate != null) { T body = this.delegate.extractData(response); return ResponseEntity.status(response.getRawStatusCode()).headers(response.getHeaders()).body(body); } else { return ResponseEntity.status(response.getRawStatusCode()).headers(response.getHeaders()).build(); } } }
@SuppressWarnings("unchecked") public T extractData(ClientHttpResponse response) throws IOException { if (!hasMessageBody(response)) { return null; } MediaType contentType = response.getHeaders().getContentType(); if (contentType == null) { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "No Content-Type header found, defaulting to application/octet-stream"); } contentType = MediaType.APPLICATION_OCTET_STREAM; } for (HttpMessageConverter messageConverter : messageConverters) { if (messageConverter.canRead(responseType, contentType)) { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "Reading [" + responseType.getName() + "] as \"" + contentType +"\" using [" + messageConverter + "]"); } return (T) messageConverter.read(this.responseType, response); } } throw new RestClientException( "Could not extract response: no suitable HttpMessageConverter found for response type [" + this.responseType.getName() + "] and content type [" + contentType + "]"); }
@Override @Nullable public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request, responseType); HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor<>(responseType, getMessageConverters(), logger); return execute(url, HttpMethod.POST, requestCallback, responseExtractor, uriVariables); }
@Override public ResponseEntity<T> extractData(ClientHttpResponse response) throws IOException { if (this.delegate != null) { T body = this.delegate.extractData(response); return ResponseEntity.status(response.getRawStatusCode()).headers(response.getHeaders()).body(body); } else { return ResponseEntity.status(response.getRawStatusCode()).headers(response.getHeaders()).build(); } } }
private void extract(@Nullable Class<? extends RestClientException> exceptionClass, ClientHttpResponse response) throws IOException { if (exceptionClass == null) { return; } HttpMessageConverterExtractor<? extends RestClientException> extractor = new HttpMessageConverterExtractor<>(exceptionClass, this.messageConverters); RestClientException exception = extractor.extractData(response); if (exception != null) { throw exception; } }
public ResponseEntityResponseExtractor(@Nullable Type responseType) { if (responseType != null && Void.class != responseType) { this.delegate = new HttpMessageConverterExtractor<>(responseType, getMessageConverters(), logger); } else { this.delegate = null; } }
HttpMessageConverterExtractor responseExtractor = new HttpMessageConverterExtractor<>(YourErrorType.class, getMessageConverters()); YourErrorType yet = (YourErrorType) responseExtractor.extractData(new ClientHttpResponse(e) { // TODO Implement interface. It is very simple. // You can get all data from the `e' variable. // But I think the Spring has own implementation. });
return null; MediaType contentType = getContentType(responseWrapper);
@Test public void notModified() throws IOException { HttpMessageConverter<?> converter = mock(HttpMessageConverter.class); extractor = new HttpMessageConverterExtractor<>(String.class, createConverterList(converter)); given(response.getRawStatusCode()).willReturn(HttpStatus.NOT_MODIFIED.value()); Object result = extractor.extractData(response); assertNull(result); }
@Override @Nullable public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request, responseType); HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor<>(responseType, getMessageConverters(), logger); return execute(url, HttpMethod.POST, requestCallback, responseExtractor, uriVariables); }
public ResponseEntity<T> extractData(ClientHttpResponse response) throws IOException { if (delegate != null) { T body = delegate.extractData(response); return new ResponseEntity<T>(body, response.getHeaders(), response.getStatusCode()); } else { return new ResponseEntity<T>(response.getHeaders(), response.getStatusCode()); } } }
return null; MediaType contentType = getContentType(responseWrapper);
@Test public void noContent() throws IOException { HttpMessageConverter<?> converter = mock(HttpMessageConverter.class); extractor = new HttpMessageConverterExtractor<>(String.class, createConverterList(converter)); given(response.getRawStatusCode()).willReturn(HttpStatus.NO_CONTENT.value()); Object result = extractor.extractData(response); assertNull(result); }
@Override @Nullable public <T> T patchForObject(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request, responseType); HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor<>(responseType, getMessageConverters(), logger); return execute(url, HttpMethod.PATCH, requestCallback, responseExtractor, uriVariables); }
@Override public ResponseEntity<T> extractData(ClientHttpResponse response) throws IOException { if (this.delegate != null) { T body = this.delegate.extractData(response); return ResponseEntity.status(response.getRawStatusCode()).headers(response.getHeaders()).body(body); } else { return ResponseEntity.status(response.getRawStatusCode()).headers(response.getHeaders()).build(); } } }
return null; MediaType contentType = getContentType(responseWrapper);
@Test public void informational() throws IOException { HttpMessageConverter<?> converter = mock(HttpMessageConverter.class); extractor = new HttpMessageConverterExtractor<>(String.class, createConverterList(converter)); given(response.getRawStatusCode()).willReturn(HttpStatus.CONTINUE.value()); Object result = extractor.extractData(response); assertNull(result); }