我正在尝试通过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或端点中)
答案 0 :(得分:1)
没有意义,但试试这个:
var date = new Date();
var par = {
'token': 'mytoken',
'id': environment.getStaffId(),
'name': "Johnny",
'createdAt': date,
'modifiedAt': date
}
答案 1 :(得分:1)
所以我想解决方法是创建一个组合对象,将所有命名和未命名的参数传递给api。快速循环可能会更好。而不是对每个进行硬编码。
var param = {};
param["token"] = "mytoken";
for (var prop in staff) {
param[prop] = staff[prop];
}
api.staff.insert(param).execute(function(res) {
});
如果你真的想要那么将参数/对象混合在一起可以成为一个灵活的功能..但它是我认为是缺陷的乐队助手。