如果ResponseEntity失败(400 Error),我们如何传递响应



我正在使用RestTemplate交换方法击中一个API,这里我正在获得ClientResponse类型的responseEntity。如果我们在第一行代码中有任何错误请求,我将得到400,光标将转到catch并抛出错误。所以剩余的代码(用于设置响应数据)没有执行。相反,我想设置响应数据,我想设置状态码,也想执行剩余的代码。我们怎么能做到这一点,我们需要使用标志变量吗??

ResponseEntity<ClientResponse> responseEntity = this.getRestTemplate().exchange(API_URL,
HttpMethod.POST, entity, ClientResponse.class);

response.setResponseEntity(responseEntity);
response.setValue(inputRequest.getValue));            
response.setEndTime(LocalDateTime.now());
response.setRequestPayload(gson.toJson(inputRequest));            
response.setHttpMethod(HttpMethod.POST);
response.setRequestHeaders(entity.getHeaders().toSingleValueMap());

} catch (Exception e) {
LOG.error("error occurred in service" + e.getMessage());
}
return response;

您可以使用restTemplate错误处理程序。您可以解析从其他模板返回的错误响应,如404或其他错误。

您可以根据需要使用这些状态码和错误响应来休息响应。

为此,您需要通过实现responseerrorhandler来定义一个类。

public class ServiceResponseErrorHandler implements ResponseErrorHandler {
private List<HttpMessageConverter<?>> messageConverters;
@Override
public boolean hasError(ClientHttpResponse response) throws IOException {

return (response.getStatusCode().is4xxClientError() ||
response.getStatusCode().is5xxServerError());
}
@Override
public void handleError(ClientHttpResponse response) throws IOException {

@SuppressWarnings({ "unchecked", "rawtypes" })
HttpMessageConverterExtractor<ServiceErrorResponse> errorMessageExtractor = 
new HttpMessageConverterExtractor(ServiceErrorResponse.class, messageConverters);

ServiceErrorResponse errorObject = errorMessageExtractor.extractData(response);

throw new ResponseEntityErrorException(
ResponseEntity.status(response.getRawStatusCode())
.headers(response.getHeaders())
.body(errorObject)
);

}
public void setMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
this.messageConverters = messageConverters;
}
}

并像这样在你的rest模板bean中使用它。

RestTemplateResponseErrorHandler errorHandler = new 
RestTemplateResponseErrorHandler();
//pass the messageConverters to errror handler and let it convert json to object
errorHandler.setMessageConverters(restTemplate.getMessageConverters());
restTemplate.setErrorHandler(errorHandler);

相关内容