1

我正在尝试对具有 2 个命名参数和一个 EntityObject 的 google enpoint 进行 PUT 调用,然后应该在正文中

@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”来自哪里(我正在本地主机上进行测试)我想如果它是 google api 来自的主机,那么它应该是“apis.google.com”

如果我在同一个地方直接使用相同的 api:

gapi.client.myendpoint.mymethod 然后它确实可以正确访问本地主机...

我似乎让它工作的唯一方法(以 rpc 方式)是合并这些东西:

var x = {field1:"data", field2:"data2"};
x.param1 = "test1";
x.param2 = "test2";
gapi.client.myendpoint.myMethod(x)

但是,如果您问我,这是一个相当大的技巧,因为现在我混合了一些东西,突然间,如果我将 param1 添加到 EntityObject 中,它也会得到(正文和路径(甚至是 url 参数)的东西应该分开。)

因此,生成方法“gapi.client.xxxxendpoint”似乎始终是 rpc 调用,其余的使用方式是转到错误的主机。

4

1 回答 1

0

根据文档,您应该使用“资源”而不是“正文”。

...    
method: 'PUT',
resource: {field1:"data",field2:"data2"}
...
于 2014-01-09T13:35:51.723 回答