Bagaimana cara menghentikan derialisasi string JSON yang berisi nilai enum yang tidak peka huruf besar / kecil? (menggunakan Jackson Databind)
String JSON:
[{"url": "foo", "type": "json"}]
dan POJO Java saya:
public static class Endpoint {
public enum DataType {
JSON, HTML
}
public String url;
public DataType type;
public Endpoint() {
}
}
dalam kasus ini, deserialisasi JSON dengan "type":"json"
akan gagal di tempat yang "type":"JSON"
akan berhasil. Tapi saya ingin "json"
bekerja juga karena alasan konvensi penamaan.
Serialisasi POJO juga menghasilkan huruf besar "type":"JSON"
Saya berpikir untuk menggunakan @JsonCreator
dan @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();
}
Dan itu berhasil. Tapi saya bertanya-tanya apakah ada solusi yang lebih baik karena ini terlihat seperti hack bagi saya.
Saya juga dapat menulis deserializer khusus tetapi saya mendapatkan banyak POJO berbeda yang menggunakan enum dan akan sulit untuk dipelihara.
Adakah yang bisa menyarankan cara yang lebih baik untuk membuat serial dan deserialisasi enum dengan konvensi penamaan yang tepat?
Saya tidak ingin enum saya di java menjadi huruf kecil!
Berikut beberapa kode tes yang saya gunakan:
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));