首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Jackson json注释用于反序列化的枚举字段

如何使用Jackson json注释用于反序列化的枚举字段
EN

Stack Overflow用户
提问于 2012-02-16 03:45:20
回答 6查看 95.4K关注 0票数 41

我在Jackson 1.6.2中使用REST web服务/Apache Wink。如何注释枚举字段以便Jackson对其进行反序列化?

内部类

代码语言:javascript
运行
复制
public enum BooleanField
{
    BOOLEAN_TRUE        { public String value() { return "1";} },
    BOOLEAN_FALSE       { public String value() { return "0";} },

Java Bean/请求对象

代码语言:javascript
运行
复制
BooleanField locked;
public BooleanField getLocked() {return locked;}

杰克逊的文档指出,它可以通过@JsonValue/@JsonCreator做到这一点,但没有提供任何例子。

有人愿意泄露(Java)bean吗?

EN

回答 6

Stack Overflow用户

发布于 2012-02-17 00:22:26

如果您使用的是Jackson 1.9,序列化将通过以下方式完成:

代码语言:javascript
运行
复制
public enum BooleanField {
   BOOLEAN_TRUE("1")
   ;

   // either add @JsonValue here (if you don't need getter)
   private final String value;

   private BooleanField(String value) { this.value = value; }

   // or here
   @JsonValue public String value() { return value; }

因此,您需要的更改是将方法添加到Enum类型本身,以便所有值都具有它。不确定它是否能在子类型上工作。

对于@JsonCreator,拥有一个静态工厂方法就可以做到这一点;因此添加如下内容:

代码语言:javascript
运行
复制
@JsonCreator
public static BooleanField forValue(String v) { ... }

Jackson 2.0实际上将支持将@JsonValue用于这两个方面,包括反序列化。

票数 52
EN

Stack Overflow用户

发布于 2016-03-11 20:51:05

Jackson 2.6或更高版本中,可以将@JsonProperty注释直接应用于枚举常量以更改其序列化:

代码语言:javascript
运行
复制
public enum BooleanField
{
    @JsonProperty("1")
    BOOLEAN_TRUE,
    @JsonProperty("0")
    BOOLEAN_FALSE
}
票数 45
EN

Stack Overflow用户

发布于 2015-12-23 21:08:49

不要注释它们,只需配置您的ObjectMapper实例:

代码语言:javascript
运行
复制
private ObjectMapper createObjectMapper() {
    final ObjectMapper mapper = new ObjectMapper();
    // enable toString method of enums to return the value to be mapped
    mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
    mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
    return mapper;
}

并在枚举中覆盖toString()方法:

代码语言:javascript
运行
复制
public enum SectionType {
START("start"),
MORE("more");

    // the value which is used for matching
    // the json node value with this enum
    private final String value;

    SectionType(final String type) {
        value = type;
    }

    @Override
    public String toString() {
        return value;
    }
}

您不需要任何注释或自定义的反序列化程序。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9300191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档