2014-11-26 1 views
2

Spring 데이터의 MongoTemplate을 사용하고 있습니다. mongoDB에 성공적으로 저장하는 클래스가 있습니다. find 메소드를 사용하여 저장된 객체를 검색하려고하면 MongoTemplate이 클래스의 멤버 중 하나의 존재하지 않는 기본 생성자를 호출하려고하기 때문에 NoSuchMethodException이 발생합니다.Spring MongoTemplate이 최종 멤버로 객체를 deserialize 할 수 있도록 힌트를 사용자 정의하거나 제공합니다.

멤버에는 최종 멤버가있는 최종 클래스이기 때문에 기본 생성자가 없습니다. 두 개의 생성자가 있습니다. 첫 번째 매개 변수는 모든 관련 값을 매개 변수로 사용합니다. 두 번째는 Map을 받아들이고 Jackson이이 클래스로 "훌륭하게"플레이 할 수있게 해주는 @JsonCreator 주석이 있습니다.

어떻게 MongoTemplate에서 클래스를 deserialize 할 수 있습니까?

도움이 될만한 특수 효과가 있습니까? 관련 클래스를 처리하기 위해 MongoTemplate에 일종의 특수 deserialization 개체를 전달할 수 있습니까? MongoTemplate에 Jackson이하는 것과 같은 방식으로 매개 변수를 보내도록 요청할 수 있습니까?

답변

4

표준이 아닌 생성자를 사용하려면 실제로 Spring Data MongoDB가 자동으로 하나를 선택할 수 있어야하지만, 문제가 발생하지 않으면 (더 많은 코드를 공유하여 명확하게 만들 수 있음) 주석을 달 수 있습니다 생성자를 @PersistenceConstructor으로 지정하여 사용되어야하는 생성자를 명시 적으로 지정하십시오.

완전히 표준이 아닌 항목의 경우 클래스에 대한 사용자 지정 변환기를 만들 수 있습니다. 더 읽을 내용은 Spring Data MongoDB reference

+0

예 @PersistenceConstructor 주석이 내 문제를 해결했습니다. 감사. –

관련 문제