我想构建我的端点,它接受以下格式的JSON数组:
[
{
"test":"Math",
"result":"Pass"
},
{
"test":"Science",
"result":"FirstClass"
}
]
这将是一个带有上述JSON的POST调用到我的终端。
我也尝试使用servlet,但没有得到所需的结果,并尝试使用list并插入新类并发布到该类。提前谢谢。
答案 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对象,但是,就像我说的那样,这是不可取的。 :)