我正在调用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 ,但是如何提取这些值?
答案 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
}