5
해당 필드 중 하나에 org.apache.commons.collections.list.LazyList
을 사용하는 객체가 있습니다.이 객체는 직렬화 된 JSON입니다. json으로는 다음과 같습니다잭슨을 사용하여 lazylist를 비 직렬화
"myObject": ["org.apache.commons.collections.list.LazyList", [
{
"attr1": "asdasd",
"attr2": 1234
}
]],
개체 필드는 다음과 같습니다
List<MyObject> myObject = ListUtils.lazyList(new ArrayList(), {new MyObject()} as Factory)
그러나 잭슨 ObjectMapper가 실패하여 위의 JSON을 역 직렬화하려고,이에 대한 기본 생성자를 찾을 수 없기 때문에 LazyList - 의미가 있습니다. 그러나 어떻게이 필드를 deserialize 할 수 있는지 지정할 수 있습니까?
오류 메시지 :
[컬렉션 유형에 대한 기본 생성자;
이 현상금을 수집하려면,이 질문이 필요 : 클래스 org.apache.commons.collections.list.LazyList는 [간단한 유형, 클래스 foo.bar.MyObject]
바운티 - 제약 포함 맞춤 잭슨 디시리얼라이저를 사용하여 답변을 얻으려면 맞춤 디시리얼라이저를 필드별로 지정할 수 없습니다! 따라서 특정 유형에 대한 LazyList의 사용자 정의 구현을 사용하는 솔루션은이 질문에 적절하게 응답하지 않습니다.
적절하게 대답하는 것과 관련하여 질문에 현상금 텍스트를 포함해야합니다. –
모든 것을 100 % 호환 할 수있는 방법이 없습니다. 데이터가 손실되기 때문에 LazyList의 백업 목록 구현 및 팩토리와 같은 가정을 만들어야합니다. 이러한 가정없이이 작업을 수행하는 유일한 방법은 직렬화 된 JSON에 정보를 추가하는 것입니다. 정보를 추가하기 위해 리플렉션을 사용하는 독자적인 시리얼 라이저를 작성할 수 있으며, 리시버를 사용하여 해당 정보를 사용하는 디시리얼라이저가 LazyList 오브젝트를 작성하지만, 사용자의 팩토리에 0-arg 생성자가 있다는 가정을하고있다. –
"java reflection"에 대한 Google 검색을 수행하고이를 사용하여 serializer 및 디시리얼라이저의 생성자에 대해 보호 된'collection' 및'factory' 변수를 가져옵니다. 또는 http://stackoverflow.com/questions/735230/java-reflection과 같은 다른 질문을 참조하십시오. –