Как я могу десериализовать строку JSON, содержащую значения enum, которые нечувствительны к регистру? (используя 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();
    }
И это сработало. Но мне было интересно, есть ли лучший solutuon, потому что это выглядит как хак для меня.
Я также могу написать собственный десериализатор, но у меня появилось много разных 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));
