何时引发 HttpStatusCodeException 异常?

When HttpStatusCodeException exception raised?

当我使用下面的代码时,出现 HttpStatusCodeException 异常是什么情况。

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

请问有谁能帮忙吗???????

HTTP 状态代码是来自服务器的响应,因此如果您可以控制服务器,那么您可以return 使其成为您想要的任何错误。如果您无法控制服务器,那么您可以尝试发送 bad/invalid 请求,这样服务器就会抱怨。

你的服务器端是这样的:

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

根据文档,有两种类型 HttpStatusCodeException HttpClientErrorExceptionHttpServerErrorException

  • 前者在收到 HTTP 4xx 时抛出。
  • 后者在收到 HTTP 5xx 时抛出。

所以你可以只使用 ResponseEntity.BodyBuilder.status(505) 例如在你的

中引发 HttpServerErrorException

org.springframework.web.client.RestTemplate class 的

exhange(...) 方法已添加到 spring-web 库的 3.1.0.RELEASE 中。

此方法抛出 RestClientException,涵盖客户端 (4_xx) 和服务器 (5_xx) 端 http 代码错误。但是 RestClientException 不提供 getStatusCode(), getResponseAsString() 等...方法。

  1. HttpsStatusCodeExceptionRestClientException 的 child,它做同样的事情,但使用 getStatusCode(), getResponseAsString() 等其他方法

  2. HttpClientErrorException child of HttpsStatusCodeException 并且只处理客户端错误 (4_xx) 而不是服务器错误。

  3. HttpServerErrorException child of HttpsStatusCodeException 并且只处理服务器错误 (5_xx) 而不是客户端错误。