How do I retrieve HTTP status code and response body when an RestClientException is thrown?

前端 未结 4 709
眼角桃花
眼角桃花 2020-12-17 08:27

The methods of RestTemplate such as postForEntity() throw RestClientException. I would like to extract the HTTP status code and respon

4条回答
  •  青春惊慌失措
    2020-12-17 08:58

    private void sendActivity(StatsActivity statsActivity) throws InterruptedException 
    {
        LibraryConnectorXapiEditView libraryConnectorXapiEditView = (LibraryConnectorXapiEditView) workerBundle.getConnector();
        
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
        Statement statement = libraryConnectorConverter.convertActivityToStatement(statsActivity, workerBundle);
        HttpEntity request = new HttpEntity<>(statement, headers);
        
        try
        {
           String lrsEndPoint = libraryConnectorXapiEditView.getLrsEndPoint() + "/statements";
           ResponseEntity response = restTemplate.exchange(lrsEndPoint, HttpMethod.POST, request, String.class);
           ocnCompletionEventDao.save(this.convertToOcnCompletionEvent(statsActivity, response.getBody(), response.getStatusCodeValue()));
        }
        catch (HttpClientErrorException ex)
        {
          ocnCompletionEventDao.save(this.convertToOcnCompletionEvent(statsActivity, ex.getResponseBodyAsString(), ex.getStatusCode().value()));
          checkResponse(ex, libraryConnectorXapiEditView);  
          if(failedAttempts<3) 
          { 
              sendActivity(statsActivity);
              failedAttempts++;
          }
        }   
    }
    
    private void checkResponse(HttpClientErrorException ex, LibraryConnectorXapiEditView libraryConnectorXapiEditView) throws InterruptedException 
    {
        int statusCode = ex.getStatusCode().value();
        int retryAfterSeconds = retryAfter(ex.getResponseHeaders());
        
        switch (statusCode)
        {
        case 401: 
            headers = xApiAuthorizationUtils.getHeaders(libraryConnectorXapiEditView);
        case 429:
            if(retryAfterSeconds!=0)
                Thread.sleep(retryAfterSeconds);
        case 422: 
            failedAttempts=3;
        }
     }
    

提交回复
热议问题