IllegalArgumentException:使用@JsonString批注反序列化生成的对象

时间:2013-02-27 23:39:20

标签: java google-cloud-endpoints

Cloud Endpoints生成的对象中的长值使用@JsonString进行注释。当使用GsonFactory反序列化这些对象时,这会导致IllegalArgumentException。

这是堆栈跟踪:

Caused by: java.lang.IllegalArgumentException: number type formatted as a JSON number cannot use @JsonString annotation [key updated, field private java.lang.Long com.google.api.services.timetable.model.Lesson.updated]
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:119)
    at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:599)
    at com.google.api.client.json.JsonParser.parse(JsonParser.java:350)
    at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:586)
    at com.google.api.client.json.JsonParser.parse(JsonParser.java:289)
    at com.google.api.client.json.JsonParser.parse(JsonParser.java:266)
    at com.google.api.client.json.JsonFactory.fromString(JsonFactory.java:207)

产生例外的示例代码:

GsonFactory gsonFactory = new GsonFactory();
Lesson lesson = new Lesson();
lesson.setUpdated(2);
String json = gsonFactory.toString(lesson);
gsonFactory.fromString(json, Lesson.class);

原创讨论https://groups.google.com/d/msg/endpoints-trusted-testers/-/_TKGoruZVt0J

1 个答案:

答案 0 :(得分:1)

发生此异常的原因是因为Java客户端库需要引用所有长整数(也称为字符串),因为JavaScript无法正确处理64位整数精度。存在一个已知问题,即Python SDK无法将64位整数正确序列化为字符串。我不确定你从哪里获得JSON,但是如果它在用户代码中,你需要确保你也正确引用了64位整数。