具有由 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
设置自定义错误处理程序
我有两个 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
设置自定义错误处理程序