我有两个春季休息服务。一个人打电话给对方。
如果发生任何内部错误,被调用者会返回这样的响应(以这种方式编程)
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对象中插入错误HttpStatus代码(如INTERNAL_ERROR)时,它总是在调用者中引发异常并进入调用者的catch块。如果它返回200那么,所有人都会在调用者中变成hunky dory。
我的问题是,当Callee在ResponseEntity返回对象中插入错误HttpStatus代码时,为什么它会在调用者中引发异常?为什么我不能像调用HttpStatus代码一样在调用者中获取ResponseEntity对象被调用者插入?
答案 0 :(得分:1)
正如您在thre RestTemplate文档中所看到的,默认情况下它使用DefaultResponseErrorHandler,如果发生错误,最终会抛出异常。
此模板分别使用SimpleClientHttpRequestFactory和DefaultResponseErrorHandler作为创建HTTP连接或处理HTTP错误的默认策略。
如果您不想要此逻辑,可以通过RestTemplate#setErrorHandler
设置自定义错误处理程序