Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

[http] RestTemplate usage #118

Copy link
Copy link

Description

@Alice52
Issue body actions

usage

  1. custom error handler: rest template default will throw xxException if response status is bot 200
@Component
public class RestTemplateErrorHandle extends DefaultResponseErrorHandler {
  @Override
  public void handleError(ClientHttpResponse response) {}
}
  1. if response is not json, rest template will throw RestClientException

// TODO: so need overwrite ResponseExtractor to get response firstly, but there are issue about InputStream read repeated.

  • RestTemplateProxy
@Component
public class RestTemplateProxy extends RestTemplate {

  @Override
  public <T> ResponseExtractor<ResponseEntity<T>> responseEntityExtractor(Type responseType) {
    return new NoExceptionRestTemplateResponseEntityExtractor<>(
        responseType, getMessageConverters());
  }
}
  • NoExceptionRestTemplateResponseEntityExtractor
public class NoExceptionRestTemplateResponseEntityExtractor<T>
    implements ResponseExtractor<ResponseEntity<T>> {
  private static final Logger log =
      LoggerFactory.getLogger(NoExceptionRestTemplateResponseEntityExtractor.class);
  private final HttpMessageConverterExtractor<T> delegate;

  NoExceptionRestTemplateResponseEntityExtractor(
      Type responseType, List<HttpMessageConverter<?>> converters) {
    if (responseType != null && Void.class != responseType) {
      this.delegate = new HttpMessageConverterExtractor<>(responseType, converters);
    } else {
      this.delegate = null;
    }
  }

  @Override
  public ResponseEntity<T> extractData(ClientHttpResponse response) throws IOException {
    if (this.delegate != null) {
      T body = null;
      try {
        // TODO: read response firstly, then call super method

        /*
        InputStream inputStream = response.getBody();
        BufferedInputStream buffInputStream = new BufferedInputStream(inputStream);
        buffInputStream.mark(inputStream.available() + 1);
        String content = new String(ByteStreams.toByteArray(buffInputStream), Charsets.UTF_8);
        buffInputStream.reset();
        */
        body = this.delegate.extractData(response);
      } catch (RuntimeException e) {
        return new ResponseEntity(null, response.getHeaders(), response.getStatusCode());
      }
      return new ResponseEntity<>(body, response.getHeaders(), response.getStatusCode());
    } else {
      return new ResponseEntity<>(response.getHeaders(), response.getStatusCode());
    }
  }
}
Reactions are currently unavailable

Metadata

Metadata

Assignees

Labels

CommonHttpJavajava implement important than extendjava implement important than extendTODOToollanguage: tool issuelanguage: tool issue

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

Morty Proxy This is a proxified and sanitized view of the page, visit original site.