Büyük / küçük harfe duyarlı olmayan enum değerleri içeren JSON dizesini seri durumdan nasıl kaldırabilirim? (Jackson Databind kullanarak)
JSON dizesi:
[{"url": "foo", "type": "json"}]
ve Java POJO'm:
public static class Endpoint {
public enum DataType {
JSON, HTML
}
public String url;
public DataType type;
public Endpoint() {
}
}
bu durumda, JSON ile seri durumunun kaldırılması çalıştığı "type":"json"
yerde başarısız olur "type":"JSON"
. Ama ben "json"
de konvansiyonel nedenleri adlandırmak için çalışmak istiyorum .
POJO'nun seri hale getirilmesi de büyük harfle sonuçlanır "type":"JSON"
@JsonCreator
Ve @JsonGetter kullanmayı düşündüm :
@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();
}
Ve işe yaradı. Ama daha iyi bir çözüm olup olmadığını merak ediyordum çünkü bu bana bir hileye benziyor.
Ayrıca özel bir seri dışı bırakıcı da yazabilirim, ancak numaralandırmayı kullanan birçok farklı POJO'm var ve bakımı zor olacak.
Herhangi biri numaralandırmaları uygun adlandırma kurallarıyla seri hale getirmenin ve seri durumdan çıkarmanın daha iyi bir yolunu önerebilir mi?
Java'daki numaralarımın küçük harf olmasını istemiyorum!
İşte kullandığım bazı test kodları:
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));