簡體   English   中英

在Appengine端點json中保留數值

[英]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,01的枚舉。

ctmt值是時間戳,我希望它們的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM