如何反序列化包含不区分大小写的枚举值的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() {
}
}
在这种情况下,使用JSON反序列化"type":"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();
}
而且有效。但是我想知道是否有更好的解决方案,因为这对我来说似乎是hack。
我也可以编写一个自定义的反序列化器,但是我有许多使用枚举的POJO,很难维护。
有人可以建议一种使用正确的命名约定对枚举进行序列化和反序列化的更好方法吗?
我不希望Java中的枚举是小写的!
这是我使用的一些测试代码:
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));