Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "type":"GIQuestionnaire",
- "id":6051,
- "questions":[
- {
- "type":"IncludeExcludeQuestion",
- "id":24057,
- "answers":[
- {
- "type":"IncludeExcludeAnswer",
- "id":101497
- },
- {
- "type":"IncludeExcludeAnswer",
- "id":101496
- }
- ]
- }
- ]
- }
- java.lang.AssertionError: Can not handle managed/back reference 'questionnaire-questions': value deserializer is of type ContainerDeserializerBase, but content type is not handled by a BeanDeserializer (instead it's of type com.foo.questionnaire.json.QuestionDeserializer)
- @Test
- public void testDeserializeQuestionnaire() {
- ObjectMapper mapper = new ObjectMapper();
- GIQuestionnaire q = manager.createGIQuestionnaire(…);
- try
- {
- String json = mapper.writeValueAsString(q);
- assertTrue(q.equals(mapper.readValue(json, GIQuestionnaire.class)));
- } catch (Exception e) {
- fail(e.getMessage());
- }
- }
- // Questionnaire abstract base class
- @JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="type")
- @JsonSubTypes({
- @JsonSubTypes.Type(value=GIQuestionnaire.class, name="GIQuestionnaire"),
- @JsonSubTypes.Type(value=PolicyQuestionnaire.class, name="PolicyQuestionnaire")
- })
- public abstract class Questionnaire implements Serializable {
- @JsonManagedReference("questionnaire-questions")
- @JsonDeserialize(as = TreeSet.class, contentAs = Question.class)
- private Set<Question> questions = new TreeSet<>();
- // … remainder omitted for brevity
- }
- // Question abstract base class
- @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
- @JsonSubTypes({
- @JsonSubTypes.Type(value = EntityQuestion.class, name = "EntityQuestion"),
- @JsonSubTypes.Type(value = IncludeExcludeQuestion.class, name = "IncludeExcludeQuestion")
- })
- @JsonDeserialize(using = QuestionDeserializer.class)
- public abstract class Question implements Comparable<Question>, Serializable {
- @JsonBackReference("questionnaire-questions")
- private Questionnaire questionnaire;
- @JsonManagedReference("question-answers")
- @JsonDeserialize(as = TreeSet.class, contentAs = Answer.class)
- private Set<Answer> answers = new TreeSet<>();
- // … remainder omitted for brevity
- }
- // Answer abstract base class
- @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
- @JsonSubTypes({
- @JsonSubTypes.Type(value = EntityAnswer.class, name = "EntityAnswer"),
- @JsonSubTypes.Type(value = IncludeExcludeAnswer.class, name = "IncludeExcludeAnswer")
- })
- @JsonDeserialize(using = AnswerDeserializer.class)
- public abstract class Answer implements Comparable<Answer>, Serializable {
- @JsonBackReference("question-answers")
- private Question question;
- // … remainder omitted for brevity
- }
- public class QuestionDeserializer extends JsonDeserializer<Question> {
- @Override
- public Question deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
- //deserialize a Question to a concrete instance
- }
- }
- public class AnswerDeserializer extends JsonDeserializer<Answer> {
- @Override
- public Answer deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
- //deserialize an Answer to a concrete instance
- }
- }
- @Entity
- @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
- public class Answer { ....
- @Entity
- @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
- public class Question { ....
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- <version>2.0.2</version>
- </dependency>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement