Java中HttpURLConnection调用NewRelic GraphQL API时NRQL查询解析失败
解决NewRelic GraphQL API执行NRQL查询的解析错误问题
问题分析
从错误响应Parsing failed at 'My_Applic'可以看出,你的NRQL查询字符串在传输过程中被意外截断,导致API无法完整解析'My_Application'这个值。这种情况通常是手动拼接JSON请求体时的格式错误导致的,比如未正确处理字符串转义或拼接过程中出现截断。
解决方案
1. 避免手动拼接JSON,使用JSON库构造请求体
在Java中手动拼接JSON字符串很容易出现格式问题,建议使用Jackson、Gson这类成熟的JSON库来生成请求体,确保格式完全合规。
示例(使用Gson):
import com.google.gson.JsonObject; public class NewRelicQuery { public static void main(String[] args) { JsonObject requestBody = new JsonObject(); String nrqlQuery = "SELECT average(duration) FROM Transaction WHERE appName = 'My_Application'"; requestBody.addProperty("query", nrqlQuery); // 将requestBody转为字符串后发送请求 String jsonRequest = requestBody.toString(); // 后续发送HTTP请求的逻辑... } }
示例(使用Jackson):
import com.fasterxml.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.Map; public class NewRelicQuery { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); Map<String, String> requestMap = new HashMap<>(); requestMap.put("query", "SELECT average(duration) FROM Transaction WHERE appName = 'My_Application'"); String jsonRequest = mapper.writeValueAsString(requestMap); // 后续发送HTTP请求的逻辑... } }
2. 验证NRQL查询本身的正确性
先在NewRelic官方控制台的查询界面测试这条NRQL语句,确认查询语法没有问题,排除查询本身的错误。
3. 检查请求头配置
确保请求头中包含正确的Content-Type: application/json和NewRelic的API密钥(Api-Key: YOUR_API_KEY),这些配置错误也可能间接导致解析异常。
验证
使用JSON库生成请求体后,发送的JSON内容会是标准格式:
{"query": "SELECT average(duration) FROM Transaction WHERE appName = 'My_Application'"}
API就能完整解析查询语句,返回正常结果。
内容的提问来源于stack exchange,提问作者Pavani Sandhya
相关产品推荐
相关产品推荐

