gpt4 book ai didi

java - 谷歌端点

转载 作者:行者123 更新时间:2023-12-01 12:27:04 24 4
gpt4 key购买 nike

我有一个关于从 Python 中的 Endpoints 模型方法检索查询的具体问题。

    # 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() 这是 null)。

DataPointModelCollection 包含“项目”,因此它包含正确的对象,如果打印 toString() 并显示为 JSON。然而问题仍然存在,因为我想将检索到的 DataPointModelCollection 映射为 Java 对象 DataPointModel 列表。

我真的很想听到一些关于这方面的见解。让我烦恼的是,我可以上传一个 DataPointModelCollection,在其中设置一个列表......但它只是反过来不行吗?

最佳答案

编辑2:抱歉,我还是不明白你在问什么。这是实际的答案 - 仅阅读其他部分以获取兴趣。

This docs page解释了如何提取客户端 Android“-Collection”生成类中的实体。您需要调用 .getItems(),而不是像“getDatapointList()”这样的命名函数。在“关于支持的返回类型”下:

Lists of serializable types Actually, what Endpoints generates is a new “Collection” JSON class that is similar to every other client model class. For example, if you have an object in your model that is represented by Lobster.java, and you want to return a List, the library will have a LobsterCollection.java. You can retrieve the list of Lobsters in your client by calling getItems().

<小时/>

编辑:非常抱歉,我承认我浏览了你的问题并且我的大脑解析了java。 Python先回答:

Python

您应该熟悉 Message物体及其Fields 。你不能简单地返回一个 python 对象。消息对象包含多个 Field 值,这些值用于将对象转换为 JSON 对象,以便通过 API HTTP 请求进行传输。

要从具有多个 Message 对象列表(例如,每个对象都包装 StringField 和 DateTimeField)的 Endpoints 函数返回 Message 对象,定义此返回类型的 Message 类应具有 MessageField其中,它允许您将消息(例如我们创建的包含 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

您需要实现一个包含集合的包装类。 See this question

阅读here有关参数和返回类型的更多信息。

参见here一个有趣的答案解释了如何添加多个实体类型作为参数(简短的故事:不能做实体类型的多个参数,不能做实体类型的集合,需要使用包含两个实体的包装实体)

关于java - 谷歌端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26247006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com