在具有Java 6的旧应用程序中,我正在使用Spring RestTemplate调用GraphQl API,现在我想知道处理响应的最佳方法是什么,一旦成功,GraphQl总是会给出StatusCode 200的响应或错误,不同之处在于,人体响应内部将有一个字符串,其中“ data”表示成功,“ errors”表示错误。 我以为我可以获取响应并将其转换为String并使用“包含”进行检查,并检查响应正文中是否存在“数据”或“错误”,但是我不知道这是否是最佳方法。 下面的代码是Java应用程序调用GraphQl API的方式:
ResponseEntity<?> response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
我想处理的方式是:
if (response.getBody().toString().contains("errors")){
handleException
}
答案 0 :(得分:1)
GraphQL将以以下JSON
格式给出响应正文
{
"data": { ... },
"errors": [ ... ]
}
如果有错误,它将有一个错误字段。
因此,在检查整个JSON响应是否包含errors
字符串而不是errors
字段时,这是一个坏主意。仅仅因为data
包含一个errors
字符串(例如想一想这是一个获取用户请求,但用户使用errors
作为他的登录ID),肯定会失败。
您应该将响应主体解析为JSON对象,并检查JSON是否包含名为errors
的字段。
如果您在类路径中有Jackson
,RestTemplate
将对其进行检测并自动进行配置以使其能够解析JSON,从而可以执行以下操作:
ResponseEntity<Map<String,Object>> response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, Map.class);
Map<String,Object> body = response.getBody();
if(body.containsKey("errors")){
//handleException
}