我的所有Cloud Endpoints方法都在本地运行,并且在部署应用程序时,所有方法都可以正常工作。这是方法:
@ApiMethod(name = "listUrl", path ="article/urls", httpMethod = HttpMethod.GET)
public String[] listUrl() {
List<Article> articles = getArticleList();
String[] urlArray = new String[articles.size()];
int i = 0;
for (Article article : articles)
urlArray[i++] = article.getUrl();
return urlArray;
}
我知道三个接受的返回类型是“POJO,数组或集合”。但我想也许String[]
导致错误,所以尝试返回String
s的集合。
@ApiMethod(name = "listUrl", path ="article/urls", httpMethod = HttpMethod.GET)
public CollectionResponse<String>/*String[]*/ listUrl() {
List<Article> articles = getArticleList();
List<String> urls = new ArrayList<String>();
//String[] urlArray = new String[articles.size()];
//int i = 0;
for (Article article : articles)
urls.add(article.getUrl());
//urlArray[i++] = article.getUrl();
return /*urlArray*/ CollectionResponse.<String> builder().setItems(urls).build();
}
但无济于事。我继续得到“500内部服务器错误。”
最离奇的部分是,当我查看管理控制台中的日志时,它会说明请求已经过了很好:
2013-09-22 22:08:00.715 /_ah/spi/com.example.hiserver.ArticleEndpoint.listUrl 200 55ms 0kb Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:23.0) Gecko/20100101 Firefox/23.0
xx.xxx.xx.xxx(my IP) - - [22/Sep/2013:22:08:00 -0700] "POST /_ah/spi/com.example.hiserver.ArticleEndpoint.listUrl HTTP/1.1" 200 129 - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:23.0) Gecko/20100101 Firefox/23.0" "hylyt-it.appspot.com" ms=56 cpu_ms=21 cpm_usd=0.000014 app_engine_release=1.8.4 instance=00c61b117cdf561948b997f4ec6be2ca72c139d1
答案 0 :(得分:0)
基于willmas评论,我摆弄了我的代码,发现你不能使用泛型作为返回参数。当你想到appengine应该如何进行并将这些东西序列化为json时,这实际上是有意义的。然后,当它在本地devserver上工作时它不会。 无论如何,在我的情况下,我使用了一个List,它在本地开发服务器上工作正常,但在部署时却没有。解决方案是创建一个
public class StringResult {
private String result;
/* getters and setters */
}
在您的情况下,您可以使用
public class StringArrayResult {
private String[] result;
/* getters and setters */
}
感谢@willma指出正确的方向。