在 Java 中处理 GraphQl 响应的最佳方法是啥
Posted
技术标签:
【中文标题】在 Java 中处理 GraphQl 响应的最佳方法是啥【英文标题】:What is the best way to handle GraphQl response in Java在 Java 中处理 GraphQl 响应的最佳方法是什么 【发布时间】:2019-10-25 20:54:35 【问题描述】:在使用 Java 6 的遗留应用程序中,我正在使用 Spring RestTemplate 调用 GraphQl API,现在我想知道处理响应的最佳方法是什么,一旦 GraphQl 总是会在成功的情况下给出 StatusCode 200 的响应或错误,不同之处在于在正文响应中会有一个字符串,其中“数据”表示成功,“错误”表示错误。 我在想我可以获得响应并转换为字符串并使用“包含”检查并检查响应正文中是否存在“数据”或“错误”,但我不知道这是否是最好的方法。 下面的代码是 Java 应用程序调用 GraphQl API 的方式:
ResponseEntity<?> response = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
我想到的处理方式是:
if (response.getBody().toString().contains("errors"))
handleException
【问题讨论】:
handleException 将是:返回新的 ResponseEntity(T body, MultiValueMapGraphQL 将以以下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
【讨论】:
以上是关于在 Java 中处理 GraphQl 响应的最佳方法是啥的主要内容,如果未能解决你的问题,请参考以下文章