When HttpStatusCodeException exception raised?

2020-05-11 01:29发布

问题:

when i use below code , what is the case to get HttpStatusCodeException exception .

ResponseEntity<Object> response = 
  restTemplate.exchange(builder.build().encode().toUri(), HttpMethod.GET, entity, Object.class);

Please can anyone help out ????????

回答1:

HTTP Status Codes are responses from the server, therefore if you have control of the server then you could make it return whichever errors you want. If you don't have control of the server then you could try sending bad/invalid requests so that the server will complain.

Something like this on your server side:

@RequestMapping(method = RequestMethod.GET)
public ResponseEntity getAnError() {
    // complain!
    return ResponseEntity.status(HttpStatus.FORBIDDEN);
}


回答2:

According to documentation there are two types of HttpStatusCodeException HttpClientErrorException and HttpServerErrorException.

  • The former is thrown when an HTTP 4xx is received.
  • The latter is thrown when an HTTP 5xx is received.

so you can just use ResponseEntity.BodyBuilder.status(505) for example to raise an HttpServerErrorException in your



回答3:

exhange(...) method of org.springframework.web.client.RestTemplate class was added in 3.1.0.RELEASE of spring-web library.

This method throws RestClientException which covers client (4_xx) and server (5_xx) side http code errors. But RestClientException doesn't offer getStatusCode(), getResponseAsString(), etc... methods.

  1. HttpsStatusCodeException is the child of RestClientException which is doing same thing but with additional methods like getStatusCode(), getResponseAsString(), etc.

  2. HttpClientErrorException child of HttpsStatusCodeException and only entertain client error (4_xx) not the server error.

  3. HttpServerErrorException child of HttpsStatusCodeException and only entertain server error (5_xx) not the client error.