2

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

4

1 に答える 1

1

この例外が発生する理由は、JavaScriptが64ビット整数の精度を正しく処理できないため、Javaクライアントライブラリがすべての長整数(別名文字列)を引用符で囲むことを想定しているためです。PythonSDKが64ビット整数を文字列として正しくシリアル化しないという既知の問題があります。JSONをどこから取得しているかは正確にはわかりませんが、ユーザーコード内にある場合は、64ビット整数も正しく引用されていることを確認する必要があります。

于 2013-02-28T01:04:26.357 に答える