【问题标题】:Grails: Convert int to enum in JSON unmarshallingGrails:在 JSON 解组中将 int 转换为 enum
【发布时间】:2014-09-26 08:21:13
【问题描述】:

我正在使用 HttpBuilder 来调用 REST 服务。我需要将 JSON 响应转换为 POGO。

这里是一个简化的 REST 调用:

def http = new HTTPBuilder('http://www.example.com/api')
http.request(Method.POST, ContentType.JSON) {
    /* ... */
    response.success { resp, json ->
        MyPogo pogo = (MyPogo) json
    }
}

它通常有效。

但现在我有一个这样的 JSON:

{ persons: [{ name:"Jhon", gender:0 }, { name:"Mary", gender:1 }] }

MyPogo 有一个 Gendern 枚举,如下所示:

class MyPogo implements Serializable {
    String name
    Gender gender
}

enum Gender {
    MALE(0),
    FEMALE(1)

    private final int key

    Gender(int key) { this.key = key }
}

使用此 POGO,HttpBuilder 会引发 GrailsCastException(无法将 Integer 转换为 Gender)。

我知道如何将 int 转换为枚举以及如何注册自定义 JSON 编组器,但是如何仅为 Gender 枚举注册自定义解组器?

编辑:枚举构造函数中的类型定义。

【问题讨论】:

    标签: json grails groovy enums


    【解决方案1】:

    尝试在构造函数中添加类型定义:

    enum Gender {
        MALE(0),
        FEMALE(1)
    
        private final int key
    
        Gender(int key) { 
            this.key = key 
        }
    }
    

    【讨论】:

    • 对不起:我的例子写得不好。我的真实代码已经像你建议的那样:(
    猜你喜欢
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多