大文字と小文字を区別しない列挙値を含む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();
}
そしてそれはうまくいった。しかし、これは私にとってハックのように見えるので、より良い解決策があるかどうか疑問に思っていました。
カスタムデシリアライザを作成することもできますが、列挙型を使用するさまざまな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));