Java中如何为JSON对象的variables键设置空JSON对象而非字符串值
解决GraphQL请求中JSONObject的variables被转为字符串的问题
问题场景
你需要构造符合要求的GraphQL请求体,期望格式如下:
{ "variables": {}, "query": "{\n uploadQueueSummary {\n fileName\n createdBy\n salesId\n completedRows\n totalRows\n uploadUUID\n uploadTime\n status\n hasErrors\n uploadType\n demandType\n errorRows\n deletedRows\n failedRows\n }\n}" }
但当前代码中,无论硬编码还是从POJO获取,variables的值都被当作字符串处理:
GraphQLQuery queryAndVars = new GraphQLQuery(); //POJO class JSONObject requestBody = new JSONObject(); requestBody.put("query",queryAndVars.getQuery()); requestBody.put("variables", "{}");
生成的错误请求体:
{ "variables": "{}", "query": "{\n uploadQueueSummary {\n fileName\n createdBy\n salesId\n completedRows\n totalRows\n uploadUUID\n uploadTime\n status\n hasErrors\n uploadType\n demandType\n errorRows\n deletedRows\n failedRows\n }\n}" }
解决方案
核心问题是你传入了字符串类型的"{}",而非JSONObject对象,只需调整传入值的类型即可:
1. 构造空variables对象
直接传入空的JSONObject实例,而非字符串:
GraphQLQuery queryAndVars = new GraphQLQuery(); JSONObject requestBody = new JSONObject(); requestBody.put("query", queryAndVars.getQuery()); // 传入空JSONObject,而非字符串"{}" requestBody.put("variables", new JSONObject());
2. 构造带参数的variables对象
如果需要传递实际变量参数,先构建对应的JSONObject再传入:
GraphQLQuery queryAndVars = new GraphQLQuery(); JSONObject requestBody = new JSONObject(); requestBody.put("query", queryAndVars.getQuery()); // 构建包含变量的JSONObject JSONObject variables = new JSONObject(); variables.put("salesId", "S12345"); variables.put("uploadType", "DEMAND"); requestBody.put("variables", variables);
3. 从POJO转换为variables对象
如果你的GraphQLQuery类中包含variables对应的POJO实例,直接用JSONObject包装该实例:
GraphQLQuery queryAndVars = new GraphQLQuery(); JSONObject requestBody = new JSONObject(); requestBody.put("query", queryAndVars.getQuery()); // 假设queryAndVars.getVariables()返回你的POJO对象 requestBody.put("variables", new JSONObject(queryAndVars.getVariables()));
这样生成的请求体中,variables就会被序列化为JSON对象格式,而非字符串。
内容的提问来源于stack exchange,提问作者wheelerlc64
相关产品推荐
相关产品推荐

