Rest服务在其响应中返回错误状态代码的ResponseEntity对象始终在调用者

时间:2018-04-21 18:07:26

标签: spring spring-rest

我有两个春季休息服务。一个人打电话给对方。

如果发生任何内部错误,被调用者会返回这样的响应(以这种方式编程)

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对象被调用者插入?

1 个答案:

答案 0 :(得分:1)

正如您在thre RestTemplate文档中所看到的,默认情况下它使用DefaultResponseErrorHandler,如果发生错误,最终会抛出异常。

  

此模板分别使用SimpleClientHttpRequestFactory和DefaultResponseErrorHandler作为创建HTTP连接或处理HTTP错误的默认策略。

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

设置自定义错误处理程序