Jackson을 사용하여 DynamoDB에 일부 데이터를 저장하는 응용 프로그램을 사용하여 복잡한 객체를 JSON으로 마샬링합니다.LinkedHashMap을 복잡한 객체로 캐스팅
예를 들어 내가 정렬 화하고있어 목적은 다음과 같습니다
private int anInteger;
private SomeOtherObject;
및 SomeOtherObject는 다음과 같습니다 :
private long aLong;
private float aFloat;
SomeObject의는 다음과 같을 수
private String aString;
private List<SomeObject> someObjectList;
개체가 아무 문제없이 마샬링되고 JSON 문자열로 DB에 저장되면 좋습니다.
DynamoDB에서 데이터를 검색 할 때 Jackson은 자동으로 JSON을 검색하고이를 다시 변환합니다 ... 'someObjectList'가 List<SomeObject>
이 아닌 List<LinkedHashMap>
으로 반환되는 것을 제외하고! 이것은 Jackson의 표준 동작입니다.이 현상이 일어나고있는 것은 아닙니다.
이제 문제가 발생합니다. 내 코드베이스는 List<SomeObject>
을 처리한다고 생각하지만 실제 처리는 List<LinkedHashMap>
입니다! 내 질문은 어떻게 내 'LinkedHashMap 다시'SomeObject '로 얻을 수 있습니다. 분명히 이것은 수동 프로세스이지만 내가 의미하는 바는 값을 추출 할 수 없다는 것입니다.
나는이 할 경우
for (LinkedHashMap lhm : someObjectList) {
// Convert the values back
}
내가 someObjectList 유형의 것을 말해 컴파일 오류가 'SomeObject의'하지의 LinkedHashMap을.
나는이 할 경우
for (SomeObject lhm : someObjectList) {
// Convert the values back
}
내가의 LinkedHashMap은 'SomeObject의'에 캐스팅 될 수 없음을 말해 런타임 오류가 발생합니다.
그러나 두 번째 예제에서는 POJO 유형에 대한 정적 참조가 필요하지 않습니다. –
@ BoSøborgPetersen 나는 그게 무슨 뜻인지 잘 모르겠다. ... – StaxMan
굉장해. 내가 할 일은 POJO 클래스에 기본 생성자가 포함되어 있는지 확인하는 것입니다 (다른 매개 변수화 된 생성자가있는 경우) – Gnana