【问题标题】:Jackson JSON parsing enum valueJackson JSON解析枚举值
【发布时间】:2015-10-21 19:21:56
【问题描述】:

假设我有一个如下的枚举类:

public enum Lang {

    ENGLISH("en_US"), FRENCH("fr_CA");

    String val;

    Lang(String val) {
       this.val = val;
    }

    public String getValue() {
        return val;
    }
}

我有一个 POJO 如下:

public class Foo {

    private String bar;
    private Lang lang;


    public String getBar() {
        return bar;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }

    public Lang getLang() {
        return lang;
    }

    public void setLang(Lang lang) {
        this.lang = lang;
    }
}

如何配置 Jackson 以将以下负载转换为 POJO 类?

{ "bar": "someValue", "lang": "en-US"}

如果我使用“en-US”或“fr-CA”以外的任何其他字符串,那么 Jackson 需要拒绝它。

当我有类似以下内容时,我看到的是:

{"bar":"bar","lang":"ENGLISH"}



Foo f = new Foo();
        f.setBar("bar");
        f.setLang(Lang.ENGLISH);
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(f);
        System.out.println(json);

我不想要除“en-US”或我在枚举类中定义的任何文本之外的任何文本。 我如何自定义 Jackson 来做到这一点?

【问题讨论】:

    标签: java json enums jackson


    【解决方案1】:

    您可以使用以下代码/注释:

    @JsonFormat
    public enum Lang {
    
        ENGLISH("en_US"), 
        FRENCH("fr_CA");
    
        private String val;
    
        Lang(String val) {
            this.val = val;
        }
    
        @JsonValue
        public String getValue() {
            return val;
        }
    
        @JsonCreator
        public static Lang fromValue(String value) {
            // TODO return the Lang with the given value, or throw an IllegalArgumentException
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      相关资源
      最近更新 更多