Làm cách nào để giải mã chuỗi JSON chứa các giá trị enum không phân biệt chữ hoa chữ thường? (sử dụng Jackson Databind)
Chuỗi JSON:
[{"url": "foo", "type": "json"}]
và Java POJO của tôi:
public static class Endpoint {
public enum DataType {
JSON, HTML
}
public String url;
public DataType type;
public Endpoint() {
}
}
trong trường hợp này, giải mã hóa JSON với "type":"json"
sẽ không hoạt động nếu như "type":"JSON"
sẽ hoạt động. Nhưng tôi cũng muốn "json"
làm việc vì lý do quy ước đặt tên.
Việc tuần tự hóa POJO cũng dẫn đến trường hợp viết hoa "type":"JSON"
Tôi đã nghĩ đến việc sử dụng @JsonCreator
và @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();
}
Va no đa hoạt động. Nhưng tôi đã tự hỏi liệu có một giải pháp tốt hơn bởi vì điều này trông giống như một hack đối với tôi.
Tôi cũng có thể viết một trình giải mã tùy chỉnh nhưng tôi có nhiều POJO khác nhau sử dụng enum và sẽ khó bảo trì.
Bất cứ ai có thể đề xuất một cách tốt hơn để tuần tự hóa và giải mã hóa các enums với quy ước đặt tên thích hợp?
Tôi không muốn enum của tôi trong java là chữ thường!
Đây là một số mã thử nghiệm mà tôi đã sử dụng:
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));