簡體   English   中英

4XX 和 5XX 錯誤時如何在 Java 中獲取 json 響應

[英]How to get json response in Java in case of 4XX and 5XX error

我正在嘗試RestTemplateRetrofit2 如果 api 返回 4XX/5XX,這兩個庫都會拋出異常。 來自郵遞員的 api 提供了一個 JSON 響應主體,以及 4XX/5XX 如何使用 RestTemplate 或 Retrofit2 檢索此 JSON 響應。

謝謝。

為此,您必須創建 RestTemplateError 處理程序並在為 RestTemplate 創建 bean 時注冊該類。

@Bean
public RestTemplate getBasicRestTemplate() {
     RestTemplate restTemplate = new RestTemplate();
     restTemplate.setErrorHandler(new RestTemplateResponseErrorHandler());
     return restTemplate;
}

您的處理程序類必須實現ResponseErrorHandler 您可以讀取存儲在body 中的 json 響應。

@Component
public class RestTemplateResponseErrorHandler implements ResponseErrorHandler {
    
    private static final Logger LOGGER = LoggerFactory.getLogger(RestTemplateResponseErrorHandler.class);

    @Override
    public boolean hasError(ClientHttpResponse httpResponse) throws IOException {
        return httpResponse.getStatusCode().series() == CLIENT_ERROR
                || httpResponse.getStatusCode().series() == SERVER_ERROR;
    }

    @Override
    public void handleError(ClientHttpResponse httpResponse) throws IOException {
        if (httpResponse.getStatusCode().series() == SERVER_ERROR) {
            LOGGER.error("Handling server error response statusCode:{} ", httpResponse.getStatusCode());
        } else if (httpResponse.getStatusCode().series() == CLIENT_ERROR) {
            LOGGER.error("Handling Client error response statusCode:{} ", httpResponse.getStatusCode());
            String body;
            InputStreamReader inputStreamReader = new InputStreamReader(httpResponse.getBody(),
                    StandardCharsets.UTF_8);
            body = new BufferedReader(inputStreamReader).lines().collect(Collectors.joining("\n"));
            throw new CustomException(httpResponse.getStatusCode().toString(), httpResponse, body);
        }
    }
}

在 try 塊之后使用HttpClientErrorExceptionHttpStatusCodeException ,如下所示。

    try{
        restTemplate.exchange("url", HttpMethod.GET, null, String.class);
    }
    catch (HttpClientErrorException errorException){
        logger.info("Status code :: {}, Exception message :: {} , response body ::{}" , e.getStatusCode()
                e.getMessage(), e.getResponseBodyAsString());
    }
    catch (HttpStatusCodeException e){
        logger.info("Status code :: {}, Exception message :: {} , response body ::{}" , e.getStatusCode()
                e.getMessage(), e.getResponseBodyAsString());

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM