App Engine端点参数,包含不同对象的数组

时间:2016-05-24 13:56:09

标签: java google-app-engine google-cloud-endpoints

我想用不同对象的数组调用App Engine端点,说Stringintint

我已尝试过StackOverflow中提到的一些建议,但由于对象数组的类型不同,因此不支持这些建议。

我创建了一个班级JsonList<T>来保存一个对象,ContainerInfo班级将Stringintint作为成员getset函数调用。

当我尝试将端点称为Endpoint(User, JsonList<ContainerInfo>)时,会引发IllegalArgumentException Parameterized type <ContainerInfo> not supported错误。

是否有可能实现此目的?

1 个答案:

答案 0 :(得分:0)

我发现Endpoint方法不允许传入两个或更多对象(除非它们是像String这样的基本类型)。在您的示例中,您传递的是UserJsonList个对象。

你可以做的是在做这个时创建一个pojo包装类,里面有User对象以及你的JsonList数组。然后在你的Endpoint方法中解开所有内容。

Endpoint(MyWrapper)

注意:如果您打算从Android等移动客户端调用您的Endpoints方法,您的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方法中,只需从包装器中获取这些属性作为新变量,然后随意使用它们。