如何反序列化包含不区分大小写的枚举值的 JSON 字符串? (使用杰克逊数据绑定)
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();
}
它奏效了。但我想知道是否有更好的解决方案,因为这对我来说看起来像是一个黑客。
我还可以编写一个自定义反序列化器,但我有许多不同的 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));