如何对包含不区分大小写的枚举值的 JSON 字符串进行反序列化? (使用 Jackson Databind)
JSON 字符串:
[{"url": "foo", "type": "json"}]
还有我的 Java POJO:
public static class Endpoint {
public enum DataType {
JSON, HTML
}
public String url;
public DataType type;
public Endpoint() {
}
}
在这种情况下,使用 "type":"json"
反序列化 JSON 将会失败,因为 "type":"JSON"
可以工作。
但出于变数命名原则的原因,我希望 "json"
也能运行。
序列化 POJO 还会导致大写的 "type":"JSON"
我想过用 @JsonCreator
和@JsonGetter:
@JsonCreator
private Endpoint(@JsonProperty("name") String url, @JsonProperty("type") String type) {
this.url = url;
this.type = DataType.valueOf(type.toUpperCase());
}
//....
@JsonGetter
private String getType() {
return type.name().toLowerCase();
}
而且成功了,但我想知道是否有更好的解决方案因为在我看来这像是黑客干的。
我也可以编写一个自定义反序列化器,但是我得到了许多不同的使用枚举的 POJO,它很难维护。
有没有人能提供一种更好的方法来使用适当的变数命名原则序列化和反序列化枚举?
我不希望我在爪哇的枚举是小写!
下面是我使用的一些测试代码:
String data = "[{\"url\":\"foo\", \"type\":\"json\"}]";
Endpoint[] arr = new ObjectMapper().readValue(data, Endpoint[].class);
System.out.println("POJO[]->" + Arrays.toString(arr));
System.out.println("JSON ->" + new ObjectMapper().writeValueAsString(arr));