云端点生成的cod中@JSONString注释的非法参数异常

2024-06-02 13:45:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个googlecloudendpointweb服务,在最终使auth生效之后,我对生成的代码有一些问题。在

我这样构建了ProtoRPC消息,使用一个整数字段表示对象id、client_id和high_water_标记。在

class NoteMessage(messages.Message):
    id = messages.IntegerField(1)
    client_id = messages.IntegerField(2)
    high_water_mark = messages.IntegerField(5)
    ...

这将生成包含long字段上的@JsonString属性的Java源代码,但是当我从服务器获得响应时,我得到以下错误。在

^{pr2}$

我似乎找不到任何可以控制序列化或反序列化的地方,那么这应该如何与Java一起工作呢?在


Tags: 代码clientauthid消息序列化数字java
1条回答
网友
1楼 · 发布于 2024-06-02 13:45:49

another post中所述,这是由protorpc库的一个奇怪之处引起的。Google的API客户端库希望int64uint64字段是JSON中的字符串,因为Javascript本身只能处理(由于精度原因)小于等于2**53的整数。在

正如您在Google的“Discovery”API标准的type-format documentation中看到的,这就是这些类型的预期。但是,protorpc库与currently use的语义不同,我们仍在确定正确的处理方法。在

所以,当你使用

id = messages.IntegerField(1)

您使用的是IntegerFields的默认变量messages.Variant.INT64。这反过来又使Java客户端库需要一个JSON字符串,比如

^{pr2}$

当从protorpc返回的响应是

{'id': 123456789}

作为应用程序的临时工作,请使用

id = messages.IntegerField(1, variant=messages.Variant.INT32)

或者,如果您的ID的大小需要超过32位,请使用:

id = messages.StringField(1)

后记:

当你在写的时候,我建议你看看Endpoints Proto Datastore API。我们已经对它的使用做了一些screencasts。在

要用endpoints-proto-datastore解决相同的问题,您需要导入

from protorpc import messages
from endpoints_proto_datastore.ndb import EndpointsVariantIntegerProperty

和使用

attr1 = EndpointsVariantIntegerProperty(variant=messages.Variant.INT32)

为了你的财产。在

相关问题 更多 >