[英]Preserving numeric values in appengine endpoints json
所以我有一個User
實體,其定義如下:
public class User {
@Id @Setter @SerializedName (ID) @ApiResourceProperty (name = ID)
protected String id;
@Index @Setter @SerializedName (EMAIL) @ApiResourceProperty (name = EMAIL)
protected String email;
@Setter @SerializedName (DISPLAY_NAME) @ApiResourceProperty (name = DISPLAY_NAME)
protected String displayName;
@SerializedName (CREATED) @ApiResourceProperty (name = CREATED)
protected long created;
@Setter @SerializedName (MODIFIED) @ApiResourceProperty (name = MODIFIED)
protected long modified;
@ApiResourceProperty (name = ACCOUNT_STATE) @SerializedName (ACCOUNT_STATE)
protected AccountState accountState;
}
將此User
對象的實例序列化后,我得到如下的JSON
{
"id" : "a1234",
"em" : "bob@bobmail.com",
"dn" : "Bob DeBuildeur",
"ct" : "1402635502580",
"mt" : "1402635502580",
"as" : "UNVERIFIED"
}
上面的作為值是我想序列化為-1,0或1的枚舉。
ct和mt值是時間戳,我希望它們的long
盡可能long
。
所以我想改用這個JSON:
{
"id" : "a1234",
"em" : "bob@bobmail.com",
"dn" : "Bob DeBuildeur",
"ct" : 1402635502580,
"mt" : 1402635502580,
"as" : -1
}
我在哪里/如何接管此對象的序列化以正確地將其序列化為JSON?
為了生成客戶端庫,如果要將其序列化為一個,則必須將“ as”的類型更改為int。 您可以使用@ApiResourceProperty(ignored = AnnotationBoolean.TRUE)忽略實際的“ as”字段,然后在int字段或訪問器/變量上使用@ApiResourceProperty(name =“ as”)將“ as”序列化為整數。
至於long,它們總是被序列化為字符串,因為JavaScript無法處理double中的完整long。 不幸的是,這里沒有好的解決方法,但是如果您使用客戶端庫,它將自動將它們轉換為客戶端語言的數字類型。
您可以通過使用以下注釋忽略枚舉類型,並創建另一組getter和setter方法,這些方法返回來處理同一枚舉字段的int值
@ApiResourceProperty(忽略= AnnotationBoolean.TRUE)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.