【问题标题】:Send Abstract Classes via the API通过 API 发送抽象类
【发布时间】:2013-06-02 15:32:48
【问题描述】:

我目前正在尝试通过发送这样的东西。云端点:

public abstract class Transaction {
//...
}

public class BuyTransaction extends Transaction {
//...
}

public class UpgradeTransaction extends Transaction {
//...
}

我的 API 方法类似于

@ApiMethod(...)
public List<Transaction> getTransactions(User user) { /*...*/}

但是生成的 Endpoint-Libs 只包含一个 Transaction-model 而忽略了其他类。当我尝试这个时:

List<? extends Transactions> 

endpoint-lib-generation 完全失败,并表示它不受支持。有没有其他方法可以通过网络发送从抽象类继承的不同类?

【问题讨论】:

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


    【解决方案1】:

    我不这么认为。您尝试解决的一般问题并不总是有可行的解决方案,因为您需要结合 Transaction 的所有属性和任何扩展类。考虑这些类:

    public abstract class Foo {
      //...
    }
    
    public class Bar extends Foo {
      public String prop;
    
      // getters and setters
    }
    
    public class Baz extends Foo {
      public Integer prop;
    
      // getters and setters
    }
    

    在客户端由Foo 表示的类的集合是否应该包含prop 字段,即StringInteger

    如果您希望通过网络发送任何扩展 Foo 的内容,您必须提供您希望作为 Foo 的一部分发送的所有属性。

    【讨论】:

    • 你可以使用反射来检索属性和类名,然后在客户端/服务器端将它们重新组合在一起。但这似乎不是 google-cloud-endpoints 中包含的功能。
    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多