具有由 Rest 服务在其响应中返回的错误状态代码的 ResponseEntity 对象总是在调用方中导致异常

ResponseEntity object with error status code returned by a Rest service in its response always causes exception in the caller

我有两个 spring boot rest 服务。一呼一唤。

被调用者return在出现任何内部错误时的响应是这样的(以这种方式编程)

ResponseEntity<String> responseEntity = new ResponseEntity<String>(jsonString, responseHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
return responseEntity;

主叫方这样调用对方:

ResponseEntity<String> responseEntity ;
try {
    responseEntity = restTemplate.postForEntity(url, entity, String.class);

    if (responseEntity.getStatusCode() != "200"{
         //do something here
    }
    else{
     //do something else here
    }
}
catch(Exception ex){
   //do something here
}

现在的问题是,每当被调用者在 returned ResponseEntity 对象中插入错误 HttpStatus 代码时,如 INTERNAL_ERROR,它总是在调用者中引发异常并进入呼叫者。如果它 returns 200 那么,调用者的一切都变得很笨拙。

我的问题是,当被调用者在 ResponseEntity return 对象中插入错误 HttpStatus 代码时,为什么它会在调用者中引发异常,为什么我不能只获取调用者中的 ResponseEntity 对象作为与被调用方插入的 HttpStatus 代码无关?

正如您在 RestTemplate documentation, by default it's using the DefaultResponseErrorHandler 中看到的那样,如果发生错误,它最终会抛出异常。

This template uses a SimpleClientHttpRequestFactory and a DefaultResponseErrorHandler as default strategies for creating HTTP connections or handling HTTP errors, respectively.

如果您不想要此逻辑,可以通过 RestTemplate#setErrorHandler

设置自定义错误处理程序