일부 JSON을 pojo에 매핑하려고합니다. 실제 데이터의 정보를 사용하여 수행하는 방법을 보았지만 제 경우에는 데이터가 어떻게 다른지 식별하는 것이 없지만 목록이 무엇으로 구성되어 있는지 알고 있습니다. 아래 예에서는 수감자 또는 건물 목록을 가져올 수 있지만이 경우에는 수감자 목록을 받고 있음을 알고 있습니다.
아래 JSON이 주어졌습니다 (중첩 된 데이터 가 이상 하다는 것을 알고 있지만 JSON이 주어 졌으므로 제어 할 수 없습니다.)
{
"data": [{
"data": {
"create_date": "2015-09-30",
"building": "12",
"dob": "2/11/1965",
"gender": "M",
"location": {
"zip": "10459"
},
"name": {
"first": "James",
"last": "Bond"
},
"id": "45"
},
"uri": "/prisoner/45"
}, {
"data": {
"create_date": "2015-09-27",
"building": "12",
"dob": "12/15/1985",
"gender": "M",
"location": {
"zip": "10459"
},
"name": {
"first": "Hans",
"last": "Gruber"
},
"id": "56"
},
"uri": "/prisoner/56"
}],
"totals": {
"total": 2,
"page": 1
},
"links": [{
"uri": "/prisoners?limit=2"
}]
}
총계 개체와 링크 개체를 포함 하는 데이터 개체가 있습니다. 중첩 된 Data 개체 배열 이 포함 된 Datum 개체 의 컬렉션 (이 경우 목록)도 있습니다 . 데이텀 객체는이 것 과 함께 추상 클래스 열린 우리당 문자열입니다. 나는 죄수 와 건물 클래스가 Thing을 확장 합니다. 위의 JSON에서 나는 죄수 목록을 얻고 있음을 알고 있습니다.
내 현재 코드 :
ObjectMapper mapper = new ObjectMapper();
Data data = mapper.readValue(responseJSON.toString(), Data.class);
Datum으로 이동 하여 Thing 개체를 Prisoner 개체 로 변경하면 완벽하게 작동합니다. 내 질문은 Prisoner 또는 Building을 수락 하지만 여전히 추상 Thing 클래스를 유지하거나 적어도 더 일반적이 될 수 있도록 만드는 방법입니다. 여러 개의 Datum 클래스를 만들 수 있다는 것을 알고 있지만 하나의 Datum 클래스를 가질 수있는 방법이 있어야한다고 생각합니다. 저는 실제로 제가 얻을 수있는 데이터의 다양한 가능성을 가지고 있습니다.
값을 읽을 때 사물의 유형이 무엇인지 알고 있습니까? 이 경우 데이터 (예 Data<T extends Thing>
:)를 매개 변수화하고 유형 매개 변수를 Datum에 전파하여 보유한 사물의 하위 클래스를 지정할 수 있기 때문입니다. 그리고 나서 다음과 같이 정적으로 수행 할 수있는 readValue를 호출 할 때 매개 변수화 된 유형에 대해 Jackson에게 알려야합니다.
mapper.readValue(jsonString, new TypeReference<Data<Prisoner>>(){});
ObjectMapper에서 사용 가능한 TypeFactory를 사용하여 매개 변수화 된 유형을 구성하여 동적으로 수행 할 수 있습니다. 다음과 같은 것 :
mapper.readValue("", mapper.getTypeFactory()
.constructParametricType(Data.class, thingSubclass));
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다