如何从RestTemplate读取HTTP状态代码?

时间:2017-03-28 11:09:21

标签: java spring

我使用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();

显示错误。我能在这做什么你知道吗?

2 个答案:

答案 0 :(得分:5)

默认情况下,RestTemplate使用DefaultResponseErrorHandler,如果您未收到其中一个被视为成功的响应,则会引发异常。这意味着如果发生错误,您的e.printStackTrace();语句将打印堆栈跟踪。 (这很可能会被忽视。)

如果这对您来说不够好,那么可以采用多种方法来规避这种行为,其中一种方法是使用setErrorHandler( ResponseErrorHandler errorHandler )提供自己的错误处理程序。

答案 1 :(得分:2)

public ActionResult Index(EmailModel emailModel) { ... } 方法的返回值是收到的响应中的数据,在您的情况postForObject中反序列化到给定的类。

如果您需要访问返回的数据和状态,请使用BalanceCheckResponse,如下所示:

postForEntity