【问题标题】:Preserving numeric values in appengine endpoints json在 appengine 端点 json 中保留数值
【发布时间】:2014-06-13 05:11:51
【问题描述】:

所以我有一个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"
}

上面的 as 值是一个我想序列化为 -10 的枚举, 或 1.

ctmt 值是时间戳,我希望它们为 longs。

所以我希望看到这个 JSON:

{
  "id" : "a1234",
  "em" : "bob@bobmail.com",
  "dn" : "Bob DeBuildeur",
  "ct" : 1402635502580,
  "mt" : 1402635502580,
  "as" : -1
}

我在哪里/如何接管此对象的序列化以正确将其序列化为 JSON?

【问题讨论】:

    标签: java google-app-engine google-cloud-endpoints


    【解决方案1】:

    出于客户端库生成的目的,如果您想将其序列化为 int,则必须将“as”的类型更改为 int。您可以使用 @ApiResourceProperty(ignored = AnnotationBoolean.TRUE) 忽略实际的“as”字段,然后在 int 字段或访问器/mutator 上使用 @ApiResourceProperty(name = "as") 将“as”序列化为整数。

    对于 long,它们总是被序列化为字符串,因为 JavaScript 无法处理 double 中 long 的全部范围。不幸的是,这里没有好的解决方法,但是如果您使用客户端库,它会自动将它们转换为客户端语言中的数字类型。

    【讨论】:

      【解决方案2】:

      您可以使用以下注解忽略枚举类型,并创建另一组 getter 和 setter 方法,它们返回处理同一枚举字段的 int 值

      @ApiResourceProperty(ignored = AnnotationBoolean.TRUE)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-29
        相关资源
        最近更新 更多