Mas*_*son 5 javascript java google-app-engine google-api google-cloud-endpoints
我想HashMap<String, String>从JS应用程序发送一个到我的Google App.我创建了一个HashMapContainer类,例如:Cloud Endpoints Collection Parameter.
Endpoint方法定义如下:
public Entity myMethod(
@Named('param1') String param1,
@Nullable @Named('param2') HashMapContainer param2) {
//...
}
Run Code Online (Sandbox Code Playgroud)
当我运行API生成时,会发生以下错误:
com.google.api.server.spi.config.validation.ApiConfigInvalidException:
Resource type 'class com.mason.server.entity.HashMapContainer'
in method 'endpoint.myMethod' should not be named.
Run Code Online (Sandbox Code Playgroud)
因此,我删除了@Named注释.生成了API,但很明显,我没有收到JS应用程序发送的参数.我的JavaScript是这样的:
function doTransaction() {
var req = gapi.client.myApi.endpoint.myMethod({
'param1': 'FOO',
'param2': {
'value1':'foofoo',
'value2':'barbar',
'value3':'foobar'
}
});
req.execute(function(data) {
console.log(data);
});
}
Run Code Online (Sandbox Code Playgroud)
param2如果我不被允许使用@Named注释,我怎么能得到?
也许我的JavaScript错了?
Google Cloud Enpoints 文档说:
@Named:此注释指示在此处注入的请求中的参数名称.未使用@Named注释的参数将注入整个请求对象.
基本上,据我所知,当您添加@Named注释时,参数将包含在请求URL的末尾:
http://end_point_url?parameter1=xxx¶meter2=yyy
Run Code Online (Sandbox Code Playgroud)
显然,支持@Named注释的参数类型只有少数(int,long,String,Boolean及其对应的数组,我认为),因为你不能将整个hashmap附加到请求URL!
另一方面,如果不使用@Named,则参数将包含(注入)在POST数据中.
要使用适用于JavaScript的Google API客户端库在HTTP正文中发送参数,您只需将该参数包含resource在JSON-RPC请求中调用的对象中,如下所示:
var req = gapi.client.myApi.endpoint.myMethod({
'param1': 'FOO',
'resource': {
'param2': {
'value1':'foofoo',
'value2':'barbar',
'value3':'foobar'
}
}
});
Run Code Online (Sandbox Code Playgroud)
API客户端将自动发送param1URL和param2POST数据...
这在Google API Client Library for JavaScript文档的这一部分中有详细说明.
| 归档时间: |
|
| 查看次数: |
3492 次 |
| 最近记录: |