Java 谷歌端点
我有一个关于在Python中从端点模型方法检索查询的特定问题Java 谷歌端点,java,python,google-app-engine,google-cloud-endpoints,Java,Python,Google App Engine,Google Cloud Endpoints,我有一个关于在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}',
# 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不包含
列表(dataPointsCollection.getDatapointList()此为空)
DataPointModelCollection包含“项”,因此它包含正确的对象,
如果打印到字符串()并显示为JSON。然而,问题仍然存在,因为
我想将检索到的DataPointModelCollection映射为Java对象DataPointModel的列表
我真的很想听到一些关于这方面的见解。困扰我的是,我可以上传一个DataPointModelCollection,在那里我设置了一个列表。。。但它只是
反过来也不行吗?编辑2:对不起,我还是不明白你在问什么。这是实际的答案-只需阅读其他部分的兴趣 解释如何提取客户端Android“-Collection”生成类中的实体。您需要调用
.getItems()
,而不是像“getDatapointList()”这样的命名函数。在“关于支持的返回类型”下:
可序列化类型列表实际上,端点生成的是一个新的“集合”JSON类,与其他所有客户端类似
模范班。例如,如果模型中有一个对象
由Lobster.java表示,您希望返回一个列表,
该库将有一个LobsterCollection.java。您可以检索
通过调用getItems()在客户端中列出龙虾
编辑:非常抱歉,我承认我浏览了你的问题,我的大脑分析了java。首先回答: PYTHON 您应该熟悉对象及其属性。不能简单地返回python对象。消息对象包含多个字段值,用于将对象转换为JSON对象,以便通过API HTTP请求进行传输 要从端点函数返回包含多个消息对象列表(例如,每个消息对象包装一个StringField和一个DateTimeField)的消息对象,定义此返回类型的消息类中应包含一个,允许您放置消息(例如我们创建的包含StringField和DateTimeField的类型)在其他消息(我们的返回类型)中。此外,在此字段上,您需要设置
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 您需要实现一个包含集合的包装器类 有关参数和返回类型的详细信息,请参阅
有关解释如何将多个实体类型添加为参数的有趣答案,请参见(简短的故事:无法执行实体类型的多个参数,无法执行实体类型的集合,需要使用包含两个实体的包装器实体)我已经弄明白了-DataPointModelCollection应该有一个不同的名称,因为端点在某种程度上为每个模型集合都有一个默认的保留名称。因此,我只是将模型的名称更改为DataPointModelInsertCollection,它起到了作用。我试图避免使用message类,因为endpoints_proto_datastore lib启用模型方法查询