用Java处理GraphQl响应的最佳方法是什么

时间:2019-06-11 12:21:02

标签: java rest graphql resttemplate graphql-java

在具有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
}

1 个答案:

答案 0 :(得分:1)

GraphQL将以以下JSON格式给出响应正文

{
  "data": { ... },
  "errors": [ ... ]
}

如果有错误,它将有一个错误字段。

因此,在检查整个JSON响应是否包含errors字符串而不是errors字段时,这是一个坏主意。仅仅因为data包含一个errors字符串(例如想一想这是一个获取用户请求,但用户使用errors作为他的登录ID),肯定会失败。

您应该将响应主体解析为JSON对象,并检查JSON是否包含名为errors的字段。

如果您在类路径中有JacksonRestTemplate将对其进行检测并自动进行配置以使其能够解析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
}