2016-05-24 4 views
0

異なるオブジェクトの配列を使用してApp Engine Endpointを呼び出すとします(Stringintおよびint)。異なるオブジェクトの配列を持つApp Engineエンドポイントパラメータ

私はStackOverflowで述べたいくつかの提案を試みましたが、それらはオブジェクトの配列が異なるタイプであるためサポートしていません。

私はgetset関数呼び出しを持つメンバーとしてStringintintを保持するオブジェクトとContainerInfoクラスを保存するために、クラスJsonList<T>を作成しました。

エンドポイントをEndpoint(User, JsonList<ContainerInfo>)としてコールしようとすると、IllegalArgumentExceptionParameterized type <ContainerInfo> not supportedエラーがスローされます。

これを回避する方法はありますか?

+1

[this](https://cloud.google.com/appengine/docs/java/endpoints/parameter-and-return-types#supported_pa​​rameter_types)によると、配列やコレクションのみを使用できます。したがって、JsonListは 'java.util.Collection'インタフェースを実装する必要があります。 – konqi

答えて

0

私が見つけたのは、Endpointメソッドは、Stringなどのプリミティブ型でない限り、2つ以上のオブジェクトを渡すことはできません。あなたの例では、UserJsonListのオブジェクトを渡しています。

あなたができることは、それを行うときにpojoラッパークラスを作成することです。そこにUserオブジェクトとそこにJsonList配列があります。 Endpointメソッド内ですべてをラップします。

Endpoint(MyWrapper) 

注:あなたが意図Androidのようなモバイルクライアントから自分のエンドポイントのメソッドを呼び出すことがあれば、あなたのJsonListはやSerializableを実装する必要がない場合があります。

編集:ここでは は一例です。

public final class SomeObject 
{ 
    private String stringValue; 
    private int intValue; 
    // add more 

    public SomeObject(String stringValue, int intValue) 
    { 
     this.stringValue = stringValue; 
     this.intValue = intValue; 
    } 

    public String getString() 
    { 
     return stringValue; 
    } 

    public String getInt() 
    { 
     return intValue; 
    } 
} 

public final class someObjectWrapper 
{ 
    private User user; 
    private List<SomeObject> someObjectList 

    public someObjectWrapper(List<SomeObject> someObjectList, int user) { 
     this.someObjectList = someObjectList; 
     this.user = user; 
    } 

    public List<SomeObject> getSomeObjectList() { 
     return someObjectList; 
    } 

    public void setSomeObjectList(List<SomeObject> someObjectList) { 
     this.someObjectList = someObjectList; 
    } 

     public int getUser() { 
     return user; 
    } 

    public void setUser(int user) { 
     this.user = user; 
    } 
} 

は、その後、あなたのAPIメソッドの内部で、ちょうど新しい変数としてラッパーからこれらのプロパティを取得して、あなたがしたいしかし彼らと仕事。

+0

アップデートを共有してくれてありがとう。 {{String、int、int}、[String、int、int]、...}のように引数を渡したいと思います。単一のエンドポイント呼び出しでこのデータをラップして送信する方法 – SetV

+0

@SetV編集を参照してください – Micro

+0

私はページをロードしようとすると、次の例外があります。 'java.lang.IllegalArgumentException:オブジェクト型SomeObjectはサポートされていません。 ' \t com.google.api.server.spi.config.jsonwriter.JsonConfigWriter.addTypeToNode(JsonConfigWriter.java:668) – SetV

関連する問題