我正在尝试对一个谷歌点进行PUT调用,该点有两个命名的参数和一个应该在正文中的EntityObject
@ApiMethod(name = "myMethod")
public MyEntity myMethod(@Named("param1") String param1, @Named("param2") String param2, MyEntity entity)
如果我去:
https://developers.google.com/apis-explorer/?base=http://localhost:8889/_ah/api#p/myendpoint/v1/myendpoint.myMethod
我需要的2个参数字段,但是请求正文我也可以获得我可以填写的MyEntity字段。
它生成:
PUT http://localhost:8889/_ah/api/myendpoint/v1/mymethod/test1/test2
并且身体有我填写的字段
在服务器端,我完全得到了我期望得到的东西。
但是现在我尝试在客户端做我自己的事情,但似乎总是会生成一个rpc调用身体中的所有内容。
这样的电话:(那个“身体”是试用)
gapi.client.myendpoint.mymethod({param1:"test1",param2:"test2",body:{field1:"data",field2:"data2"}})
我收到了一个帖子请求:(所以它看起来像是一个rpc电话,但那不是我想要的)
http://localhost:8889/_ah/api/rpc
一切都在身体里...... 在我的服务器端,EntityObject只是完全为空,因为它没有正确映射..
如果我用自己重建它自己:
https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiclientrequest
var request = gapi.client.request({
path: "myendpoint/v1/mymethod/" + param1+ "/" +param2,
method: 'PUT',
body: {field1:"data",field2:"data2"}
});
然后我收到了一个请求:
https://content.googleapis.com/myendpoint/v1/mymethod/test1/test2&alt=json
不确定“content.googlepis.com”的来源(我正在localhost上测试) 我想如果它是google api来自的主机那么应该是“apis.google.com”
如果我直接在同一个地方使用相同的api:
gapi.client.myendpoint.mymethod然后它确实正确地转移到localhost ...
我似乎让它工作的唯一方式(以rpc方式)是合并这些东西:
var x = {field1:"data", field2:"data2"};
x.param1 = "test1";
x.param2 = "test2";
gapi.client.myendpoint.myMethod(x)
但是,如果你问我,这是一个非常黑客,因为现在我混合了东西,突然如果我将param1添加到EntityObject它也得到了 (身体和路径(甚至url params)的东西应该分开。)
所以似乎生成方法“gapi.client.xxxxendpoint”总是rpc调用 其余的使用方式是错误的主机。
答案 0 :(得分:0)
根据文档,您应该使用“资源”而不是“正文”。
...
method: 'PUT',
resource: {field1:"data",field2:"data2"}
...