6

我正在尝试对我的 GAE Cloud Endpoint 进行以下 api 调用:

gapi.client.myapp.foo.update({
  "value": "foobar",
  "key": "keyvaluefromlistoperation"
}).execute(function(resp) {
  console.log(resp);
});

回应如下:

[
 {
  "error": {
   "code": 400,
   "message": "Bad Request",
   "data": [
    {
     "domain": "usageLimits",
     "reason": "keyInvalid",
     "message": "Bad Request"
    }
   ]
  },
  "id": "gapiRpc"
 }
]

请注意,在此调用之前,我已经过身份验证,插入了几个 foo 对象,然后调用 list 将它们返回给客户端。api 的资源管理器更新调用工作正常,运行下面的 jQuery 代码段也工作正常。有什么建议么?或者我只是在实验性的错误领域。

var token = gapi.auth.getToken();
$.ajax({
  type:"POST",
  beforeSend: function (request) {
    request.setRequestHeader("Content-Type","application/json");
    request.setRequestHeader("Authorization", token.token_type+" "+token.access_token);
  },
  url: "https://myappid.appspot.com/_ah/api/myapp/v1/foo/update",
  data:JSON.stringify({
     "value": "foobar",
     "key": "keyvaluefromlistoperation"
  }),
  processData: false,
  dataType: "json",
  success: function(msg) {
    console.log(msg);
  },
  failure: function(msg) {
     console.log(msg);
  }
});

这是Java代码:

@Api(
    name = "myapp",
    description = "This is the myapp rest interface",
    scopes = {"https://www.googleapis.com/auth/userinfo.email"},
    version = "v1",
    clientIds = {Ids.WEB_CLIENT_ID}
)
public class FooV1 {

    private static PersistenceManager getPersistenceManager() {
        return PMF.get().getPersistenceManager();
    }

    @ApiMethod(
            name = "foo.update", 
            httpMethod = HttpMethod.POST
    )
    public Foo update(Foo foo, User user) throws OAuthRequestException, IOException, UnauthorizedUpdateException {
        PersistenceManager pm = PMF.get().getPersistenceManager();

        if (user != null) {
            try {
                Foo f = pm.getObjectById(Foo.class, foo.getId());
                if ( Security.isUpdateAuthorized(f, user) ) {
                    if( foo.getValue() != null ) f.setValue(foo.getValue());
                } else {
                    throw new UnauthorizedUpdateException("");
                }
            } finally {
                pm.close();
            }
        } else {
            throw new OAuthRequestException("Invalid user.");
        }

        return foo;
    }
}
4

1 回答 1

9

我有同样的问题。显然,一旦部署到 GAE,就不能使用“密钥”作为字段。在本地它工作得很好。

于 2013-11-25T16:55:45.317 回答