从异常消息中提取statusCode和消息

时间:2020-09-23 08:29:52

标签: java spring-boot

我正在调用REST API,并在发生任何异常的情况下将响应代码和消息捕获在表中。

catch (HttpClientErrorException ex) {
            logger.error("HttpClientErrorException occures in calling API");
            System.out.println(ex.getStatusCode());
            System.out.println(ex.getMessage());

输出:

HttpClientErrorException occures in calling API
400 BAD_REQUEST
400 : [{"errors":[{"status":"400","code":"1002","title":"Missing parameter","detail":"Id element is mandatory."}]}]

似乎我可以从ex.getMessage()获得所需的值 StatusCode和Message ,但是如何提取这些值?

1 个答案:

答案 0 :(得分:0)

您看到message属性中正在调用服务器的答案,因此格式取决于您所调用的服务器/端点。 在这种特殊情况下,您可以解析JSON并像处理对象一样使用它并访问所有道具。更简单(但更难看)的方法是通过正则表达式提取所有您需要的东西。

但是同样,您将没有通用的解决方案,因为它取决于服务器的答案。

使用Jackson库示例作为JSON进行解析:

public class ErrorMessage { // getter/setter are omitted
  String title;
  String detail;
  String code;
  String status;
}
catch (HttpClientErrorException ex) {
  logger.error("HttpClientErrorException occures in calling API");
  ObjectMapper objectMapper = new ObjectMapper();
  ErrorMessage errorMessage = objectMapper.convertValue(ex.getMessage(), ErrorMessage.class);
  System.out.println(errorMessage.getTitle); // <- you have an object now, so you can do whatever you want
}