Java Jackson JSON解析枚举值
假设我有一个enum类,如下所示:Java Jackson JSON解析枚举值,java,json,enums,jackson,Java,Json,Enums,Jackson,假设我有一个enum类,如下所示: 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 { pri
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”或我在enum类中定义的任何文本之外,我不想要任何文本。
如何自定义Jackson来执行此操作?您可以使用以下代码/注释:
@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
}
}
您可以使用以下代码/注释:
@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
}
}