【发布时间】:2014-10-25 15:30:46
【问题描述】:
编辑我在此发布了一个问题,它应该在 Google AppEngine SDK 的 1.9.16 版中得到修复。 https://code.google.com/p/googleappengine/issues/detail?id=11414
我正在使用 Google Cloud Endpoints 开发服务。
当我将 REST 和 RPC API 部署在 App Engine 上时,它的效果都很好。然而奇怪的是,当我在本地(localhost)测试服务时,REST 调用工作正常,但我在使用 RPC 调用时遇到了问题。
我在后端的方法签名是:
@ApiMethod(name = "user.updateprofile", httpMethod = HttpMethod.POST)
public UserProfileDto updateProfile(@Named("sessionToken") String sessionToken, UserProfileDto profile) throws UnauthorizedException { return profile; }
为简单起见,我只是直接返回UserProfileDto。
我已尝试在本地执行以下请求:
POST http://localhost:4567/_ah/api/rpc?prettyPrint=false
Content-Type: application/json-rpc
Accept: application/json-rpc
{
"method": "mobilebackend.user.updateprofile",
"id": "gtl_1",
"jsonrpc": "2.0",
"params": {
"sessionToken": "12345",
"resource": {
"username": "foo",
"userPrivate": true
}
},
"apiVersion": "v1"
}
当我在updateProfile 方法中设置断点时,我看到sessionToken 是正确的12345 但是username 字段是null 并且userPrivate 字段是false,即使我将其指定为true。 UserProfileDto (profile) 的实例不是null。
问题是在使用 RPC 调用 localhost 时无法将值注入到 DTO 的字段中。当我在已部署的版本上对其进行测试时,它工作正常,当我使用 REST 调用时,它在 localhost 和部署在 App Engine 上时都可以工作。
当我更改上述请求中的 url 以在应用引擎上定位我的应用程序的部署版本时,它工作得很好。 https://<app-name>.appspot.com/_ah/api/rpc?prettyPrint=false
我使用以下命令在 localhost 上启动服务:
mvn appengine:devserver
为了调用 Cloud Endpoints RPC 方法 localhost,我是否遗漏了一些配置?还是不支持?
我应该注意到,我也尝试过使用 RPC 的自动生成的 iOS 客户端库,它也失败并出现相同的错误,因为服务无法将值注入 DTO 对象的字段。
【问题讨论】:
-
我有同样的问题,本地主机会继续给我传递参数的 NULL 结果。在我的笔记中找到了一些解决一些本地主机问题的东西,从 appengine sdk 运行本地开发服务器,参数 appengine-java-sdk-1.8.6/bin/dev_appserver.sh --address="0.0.0.0" 这解决了我的一些问题localhost 不久前的问题。不记得这个 NULL 传递是否是其中之一,这也许值得尝试?
-
@Pega88 谢谢,我会尝试用 0.0.0.0 启动开发服务器,看看是否能解决问题。你看到了吗:code.google.com/p/googleappengine/issues/detail?id=11414Google 声明它应该在 1.9.16 版中修复。这是下一个版本,因为几天前发布了 1.9.15。他们几乎每个月都会发布,所以我期待着下一个版本作为圣诞礼物。 ;)
-
你的问题解决了吗?
-
@MarCialR - 你好。还没有,但是,我可以看到几天前有一个新版本 1.9.17。我被承诺在 1.9.16 中修复,所以在圣诞节和新年之间,当我有时间修复它时,我会检查它并回复你。如果我在新年前忘记了,请发表另一条评论作为提醒。 :)
-
@dynamokaj 你能尝试 1.9.17 吗?
标签: google-app-engine google-cloud-endpoints