用于传输命名参数的云端点资源属性&身体不起作用

时间:2014-01-09 13:11:05

标签: javascript google-app-engine google-cloud-endpoints

我正在尝试通过gapi.client rpc调用实现对Google云端点的调用。如文档(和Google Cloud Endpoints - Making calls with JS client, passing params and JSON body)中所述,应该可以包含命名参数和对象主体:

@ApiMethod(name = "staff.insert", httpMethod="post")
    public Staff insertStaff(@Named("token") String token, Staff staff) throws ConflictException, NotFoundException, InternalServerErrorException {

应该可以通过

进行调用
var staff = {};
           staff.id = environment.getStaffId();
           staff.name = "Johnny";
           staff.createdAt = new Date();
           staff.modifiedAt = new Date();

           var par = { 'token' : "mytoken", 'resource' : staff};

           api.staff.insert(par).execute(function(res) {

           });

我不能让它工作,我总是在java端点获得一个空的staff对象,但是一个正确的令牌。这是关于dev env(1.8.8)和appengine。 gapi.client版本是1.1.0-beta。

端点工作正常,当通过api explorer(使用rest而不是rpc)和android生成的端点库(也使用json rest)使用时传输正确的人员。

在chrome调试器中转储rpc请求表明有一个params字典,其中包含资源字典和令牌params,看起来资源属性不是由gapi.client专门处理的。它应该如何,端点代码具有“资源”参数的特殊处理程序?或者这是一个大问题?

在gapi.client混淆源上使用chrome调试器并在我可以找到的唯一字符串出现的“资源”上设置断点,断点永远不会被命中。格式化params / body我做错了吗?有任何想法吗?或者我可以澄清有关我的设置的问题?

(我还在gapi.client讨论组上发布了这个问题,但不清楚问题是在gapi或端点中)

2 个答案:

答案 0 :(得分:1)

没有意义,但试试这个:

var date = new Date();
var par = {
    'token': 'mytoken',
    'id': environment.getStaffId(),
    'name': "Johnny",
    'createdAt': date,
    'modifiedAt': date
}

我过去complained about this

答案 1 :(得分:1)

是的,同意这是一个错误。也给我带来了巨大的痛苦。

所以我想解决方法是创建一个组合对象,将所有命名和未命名的参数传递给api。快速循环可能会更好。而不是对每个进行硬编码。

var param = {};
param["token"] = "mytoken";
for (var prop in staff) {
  param[prop] = staff[prop];
}
api.staff.insert(param).execute(function(res) {
       }); 

如果你真的想要那么将参数/对象混合在一起可以成为一个灵活的功能..但它是我认为是缺陷的乐队助手。