2

Cloud Endpoints のメソッドはすべてローカルで機能し、アプリをデプロイすると 1 つを除いてすべて機能します。メソッドは次のとおりです。

@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;
}

受け入れられる 3 つの戻り値の型は、「POJO、配列、またはコレクション」であることを知っています。しかし、おそらく がエラーの原因であると考えたので、代わりString[]に s のコレクションを返そうとしました。String

@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 内部サーバー エラー」が引き続き発生します。

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
4

1 に答える 1

0

willmas のコメントに基づいて、コードをいじってみたところ、戻りパラメーターとしてジェネリックを使用できないことがわかりました。appengine がどのように動作し、その内容を json にシリアライズするかを考えると、これは実際に理にかなっています。次に、ローカルのdevserverで動作する場合は動作しません。とにかく、私の場合、ローカル開発サーバーでは正常に機能しましたが、展開時には機能しなかったリストを使用しました。解決策は、

public class StringResult {
    private String result;
    /* getters and setters */ 
}

あなたの場合、使用できます

public class StringArrayResult {
    private String[] result;
    /* getters and setters */
}

正しい方向を示してくれてありがとう@willma。

于 2013-12-06T12:17:15.090 に答える