我有一个关于从Python中的端点模型方法检索查询的具体问题。
# DataPointModel GET LIST api method
@DataPointModel.query_method(query_fields=('user_key', ), # Fields from which the method is querying from
path='datapoint/list/{user_key}', # REST api parameters
name='datapoint.list_get_by_user_key') # Metod name
def datapoint_list_get_by_user_key(self, query):
'''
Returns the DataPointModel object model list by its user KEY
'''
return query
我在Android(Java)上有客户端。 问题是这会返回一个不包含的DataPointModelCollection List(dataPointsCollection.getDatapointList()这是null)。
DataPointModelCollection包含“items”因此它包含正确的对象, 如果打印到toString()并显示为JSON。然而问题仍然存在,因为 我想将检索到的DataPointModelCollection映射为Java对象DataPointModel的列表。
我真的很想听听有关这方面的一些见解。令我感到困扰的是,我可以上传一个DataPointModelCollection,我在其中设置了一个List ......但它只是 反过来不起作用吗?
答案 0 :(得分:1)
编辑2 :抱歉,我仍然不明白你在问什么。这是实际的答案 - 只阅读其他部分的兴趣。
This docs page解释了如何提取客户端Android“-Collection”生成的类中的实体。您需要调用.getItems()
,而不是像“getDatapointList()”这样的命名函数。在“关于支持的退货类型”下:
可序列化类型列表实际上,Endpoints生成的是一个新的“Collection”JSON类,与其他客户端类似 模特课。例如,如果模型中有一个对象,那么 由Lobster.java表示,并且您想要返回List, 该库将有一个LobsterCollection.java。你可以检索 通过调用getItems()来获取客户端中的龙虾列表。
编辑:非常抱歉,我承认我浏览了你的问题,我的大脑解析了java。 Python首先回答:
<强> PYTHON 强>
您应该熟悉Message个对象及其Fields。你不能简单地返回一个python对象。消息对象包含多个Field值,用于将对象转换为JSON对象,以便通过API HTTP请求进行传输。
要从Endpoints函数返回一个Message对象,该函数包含多个Message对象的列表(例如,每个对象包含一个StringField和一个DateTimeField),定义此返回类型的Message类应该具有{{3}在它中,它允许您将Messages(例如我们创建的包含StringField和DateTimeField的类型)放入其他Messages(我们的返回类型)中。此外,在此字段中,您需要设置repeated=True
,如下面的代码段所示:
# REPEATED IN MESSAGE FIELD IN ORDER CLASS
class Lot(messages.Message):
price = messages.IntegerField(1, required=True)
quantity = messages.IntegerField(2, required=True)
class Order(messages.Message):
symbol = messages.StringField(1, required=True)
total_quantity = messages.IntegerField(2, required=True)
trade_type = messages.EnumField(TradeType, 3, required=True)
lots = messages.MessageField(Lot, 4, repeated=True) # REPEATED FIELD!
limit = messages.IntegerField(5)
<强> JAVA 强>
您需要实现包含集合的包装类。 MessageField。
阅读See this question以获取有关参数和返回类型的更多信息。
请参阅here一个有趣的答案,解释如何添加多个实体类型作为参数(简短的故事:不能做多个实体类型的参数,不能做实体类型的集合,需要使用包含两个实体的包装器实体
答案 1 :(得分:0)
我已经知道了 - DataPointModelCollection应该有一个不同的名称,因为端点以某种方式为每个模型集合都有一个默认的保留名称。所以我只是将模型的名称更改为DataPointModelInsertCollection