대소 문자를 구분하지 않는 열거 형 값을 포함하는 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을 deserialize하면 "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));