簡體   English   中英

Jackson JSON解析枚舉值

[英]Jackson JSON parsing enum value

假設我有一個如下的枚舉類:

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”:“ zh-CN”}

如果我使用“ 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”或在枚舉類中定義的任何內容外,我不需要任何其他文本。 我如何自定義傑克遜來做到這一點?

您可以使用以下代碼/注釋:

@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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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