JSON 역 직렬화에 사용하려는 다음 클래스가 있습니다.
public interface MyObject {
@JsonProperty("prop")
String prop;
@JsonProperty("value")
Double value(); // Need this to be either a double or a string or a Map
}
그러나 이중 값으로 JSON을 모두 구문 분석 할 수 있기를 원합니다.
{
prop: "myprop",
value: 15.7
}
그리고 문자열이나지도와 같은 Double 값이 아닌 JSON
{
prop: "myprop1",
value: {
"attr1": "value1",
"attr2": 12.0
}
}
@JsonSubTypes
주석을 살펴 보았지만 상속이 관련된 경우에만 유용 해 보입니다. Jackson에서 할 수 있습니까? 그렇다면 동일한 작업을 수행하기 위해 Java 클래스를 어떻게 정의 할 수 있습니까?
일반적으로 임의 유형의 데이터 포인트를 사용하지 않는 것이 좋습니다. 강력한 유형을 갖는 것은 원하는 경우 이야기 할 수있는 많은 이점을 제공합니다. 그러나 deserialization에 대해서만 이야기했기 때문에 다른 사람이 생성 한 JSON을 읽고있는 것일 수 있습니다.
해결책은 아주 간단합니다. 객체 필드를 사용합니다.
public static class MyObject {
@JsonProperty("prop")
String prop;
@JsonProperty("value")
Object value; // <- object
}
@Test
public void testUnknownType() throws JsonProcessingException {
final ObjectMapper objectMapper = new ObjectMapper();
final MyObject object1 = objectMapper.readValue("{\n" +
" \"prop\": \"myprop\",\n" +
" \"value\": 15.7\n" +
"}", MyObject.class);
Assert.assertEquals(15.7d, object1.value);
final MyObject object2 = objectMapper.readValue("{\n" +
" \"prop\": \"myprop1\",\n" +
" \"value\": {\n" +
" \"attr1\": \"value1\",\n" +
" \"attr2\": 12.0\n" +
" }\n" +
"}", MyObject.class);
Assert.assertTrue(object2.value instanceof Map);
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다