我使用RestTemplate调用Rest API。响应没有任何问题。我需要获取HTTP状态代码。像这样。
请求正常 - 200
未经授权 - 400
根据很多帖子,我遇到了吼叫答案。
RestTemplate template = new RestTemplate();
HttpEntity<String> response = template.exchange(url, HttpMethod.POST, request, String.class);
String resultString = response.getBody();
HttpHeaders headers = response.getHeaders();
在这里使用交换方法来获得响应。(template.exchange ....) 但我用了
postForObject方法
这是我的代码
public BalanceCheckResponse accountTotal(String counterAlias, String counterAuth, String subscriberType,
String subscriberValue, String accessMode, String token) {
BalanceCheckResponse objResponse = new BalanceCheckResponse();
try {
BalanceCheckRequest objRequest = new BalanceCheckRequest();
objRequest.setCounterAlias(counterAlias);
objRequest.setCounterAuth(counterAuth);
objRequest.setSubscriberType(subscriberType);
objRequest.setSubscriberValue(subscriberValue);
objRequest.setAccessMode(accessMode);
RestTemplate rstTemp = new RestTemplate();
final String url = "https://ideabiz.lk/apicall/startpoint/v1/balanceCheck";
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
MappingJackson2HttpMessageConverter map =new MappingJackson2HttpMessageConverter();
messageConverters.add(map);
//messageConverters.add(new StringHttpMessageConverter());
rstTemp.setMessageConverters(messageConverters);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.add("Authorization", "Bearer "+token);
HttpEntity<BalanceCheckRequest> entity = new HttpEntity<BalanceCheckRequest>(objRequest,headers);
objResponse = rstTemp.postForObject(url,entity, BalanceCheckResponse.class );
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(objResponse.getCurrentBalance());
return objResponse;
}
在我的代码中
objResponse.getHeaders();
显示错误。我能在这做什么你知道吗?
答案 0 :(得分:5)
默认情况下,RestTemplate
使用DefaultResponseErrorHandler
,如果您未收到其中一个被视为成功的响应,则会引发异常。这意味着如果发生错误,您的e.printStackTrace();
语句将打印堆栈跟踪。 (这很可能会被忽视。)
如果这对您来说不够好,那么可以采用多种方法来规避这种行为,其中一种方法是使用setErrorHandler( ResponseErrorHandler errorHandler )
提供自己的错误处理程序。
答案 1 :(得分:2)
public ActionResult Index(EmailModel emailModel)
{
...
}
方法的返回值是收到的响应中的数据,在您的情况postForObject
中反序列化到给定的类。
如果您需要访问返回的数据和状态,请使用BalanceCheckResponse
,如下所示:
postForEntity