编辑我在此发布了一个问题,应该在Google AppEngine SDK的1.9.16版中修复。 https://code.google.com/p/googleappengine/issues/detail?id=11414
我正在使用Google Cloud Endpoints开发服务。
当我在App Engine上部署REST和RPC API时,它们都能很好地工作。然而奇怪的是,当我在本地测试服务(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
且{ {1}}字段为userPrivate
,即使我将其指定为false
。 true
的实例不是UserProfileDto (profile)
。
问题是在使用RPC调用localhost时无法将值注入DTO的字段。当我在已部署的版本上测试它时,它工作正常,当我使用REST调用时,它既可以在localhost上运行,也可以在App Engine上部署。
当我更改上述请求中的url以在app引擎上定位我的应用程序的部署版本时,它可以正常工作。 null
我使用以下方法在localhost上启动服务:
https://<app-name>.appspot.com/_ah/api/rpc?prettyPrint=false
为了调用Cloud Endpoints RPC方法localhost,我是否会错过一些配置?还是不支持?
我应该注意到我也尝试过使用RPC的自动生成的iOS客户端库,它也因为服务无法将值注入DTO对象的字段而失败并出现相同的错误。
答案 0 :(得分:1)
我测试了Google AppEngine SDK的1.9.17版,并且可以确认在RPC POST请求中使用对象现在可以正常工作。