我有两个弹簧启动休息服务。一个叫另一个。
被调用方在发生任何内部错误时返回这样的响应(以这种方式编程(
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
}
现在的问题是,每当被调用方在返回的 ResponseEntity 对象(如 INTERNAL_ERROR(中插入错误 HttpStatus 代码时,它总是在调用方中引发和异常,并进入调用方的 catch 块。如果它返回 200,则调用方中的所有内容都变得笨拙。
我的问题是,为什么当被调用方在响应实体返回对象中插入错误的 HttpStatus 代码时,它会在调用方中引发异常,为什么我不能只在调用方中获取响应实体对象,而不管被调用方插入的 HttpStatus 代码如何?
正如您在 RestTemplate 文档中看到的那样,默认情况下它使用 DefaultResponseErrorHandler,如果发生错误,它最终会引发异常。
此模板使用 SimpleClientHttpRequestFactory 和 DefaultResponseErrorHandler 作为分别创建 HTTP 连接或处理 HTTP 错误的默认策略。
如果您不需要此逻辑,可以通过 RestTemplate#setErrorHandler 设置自定义错误处理程序