Cloud Endpoints不接受JSON数组

时间:2014-11-18 13:15:20

标签: google-app-engine

我想构建我的端点,它接受以下格式的JSON数组:

[
  {
    "test":"Math",
    "result":"Pass"    
  },
  {
    "test":"Science",
    "result":"FirstClass"    
  }
]

这将是一个带有上述JSON的POST调用到我的终端。

我也尝试使用servlet,但没有得到所需的结果,并尝试使用list并插入新类并发布到该类。提前谢谢。

2 个答案:

答案 0 :(得分:0)

这是正在发送的JSON对象的准确表示吗?因为人们不会简单地将带有param对象的JSON对象的POST请求发送到云端点。有关从javascript角度全面了解Endpoint API交互的详细信息,请参阅here - 请注意客户端库如何公开对象" gapi"通过哪些电话进行。如果您从iOS或Android应用程序发送此JSON,则可以通过a cloud endpoints build tool为您生成类似的客户端库。

答案 1 :(得分:0)

非常沮丧之后,我更谨慎地阅读了文档。在那个任务中,我在文档中找到了一个重要的注释: https://cloud.google.com/endpoints/docs/frameworks/java/parameter-and-return-types

"除参数或注入类型之外的任何类型都被视为实体类型。 ...实体类型无法使用@ Named"

进行注释

所有示例都显示了命名参数,因为文档不能进一步解释,我感到难过,但随后找到了解决方案。最后,如果你没有命名参数,一切都只是作为LinkedHashMap传入。通常,您只需使用该数据结构即可完成所需的任何工作,但如果您必须使用JSON,则可以对其进行转换。以下是一些例子:

@ApiMethod(name = "endpointIterfaceName.createItems", httpMethod = "post", path = "test/items")
public WhateverReturnType createItems(LinkedHashMap<String, Object> itemsMap) {

    // Do Stuff with map values
    return whateverReturnValue;

}

有了这个,您需要确保使用json的Content-Type发布数据(即 Content-Type:application / json; charset = UTF-8 )。因此,例如,在测试时,使用jquery ajax调用,您需要将dataType设置为&#34; json&#34;或者与Postman一起,你会选择&#34; Raw&#34;然后是JSON(application / json)。

如果你真的想将它转换为Java中的JSON对象,因为无论出于什么原因你都不能使用哈希映射,你可以在你的方法中执行以下操作:

// Use gson library to convert the map to a string
Gson gson = new Gson(); 
String mapAsJsonString = gson.toJson(itemsMap); 
// create a JSON object from the new string representation
JSONObject obj = new JSONObject(mapAsJsonString);

作为旁注,如果将其作为Content-Type:text传递,那么整个主体将作为地图的第一个键位于地图中。你可以在这里做一些不明智的事情,只是得到那个键,避免将地图转换为字符串,然后转换为json对象,但是,就像我说的那样,这是不可取的。 :)