2013-02-27 31 views
2

Cloud端點生成的對象中的長值用@JsonString註釋。使用GsonFactory反序列化這些對象時,會導致IllegalArgumentException。IllegalArgumentException:使用@JsonString批註反序列化生成的對象

這是堆棧跟蹤:

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); 

原始discusssion https://groups.google.com/d/msg/endpoints-trusted-testers/-/_TKGoruZVt0J

回答

1

爲什麼會發生異常是因爲Java客戶端庫的預期,原因所有長整數被引用(又名字符串),因爲JavaScript無法正確處理64位整數精度。有一個已知的問題,Python SDK不能將64位整數正確串行化爲字符串。我不確定你從哪裏獲得JSON,但是如果它是在用戶代碼中,則需要確保你也有正確引用的64位整數。

+0

我添加了如何生成異常的示例代碼。我在客戶端(Android)和服務器端都使用Java,因此不涉及Python。 – 2013-02-28 10:50:20

+0

這實際上是我身邊的一個錯誤。重新生成端點類後,它的工作完美無瑕。我想我在將類更改回GenericJson(連接到Google Groups中的原始錯誤)時會搞砸了。 – 2013-02-28 21:42:39