Advertisement
Guest User

Untitled

a guest
Mar 6th, 2015
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.84 KB | None | 0 0
  1. {
  2. "type":"GIQuestionnaire",
  3. "id":6051,
  4. "questions":[
  5. {
  6. "type":"IncludeExcludeQuestion",
  7. "id":24057,
  8. "answers":[
  9. {
  10. "type":"IncludeExcludeAnswer",
  11. "id":101497
  12. },
  13. {
  14. "type":"IncludeExcludeAnswer",
  15. "id":101496
  16. }
  17. ]
  18. }
  19. ]
  20. }
  21.  
  22. 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)
  23.  
  24. @Test
  25. public void testDeserializeQuestionnaire() {
  26. ObjectMapper mapper = new ObjectMapper();
  27. GIQuestionnaire q = manager.createGIQuestionnaire(…);
  28. try
  29. {
  30. String json = mapper.writeValueAsString(q);
  31. assertTrue(q.equals(mapper.readValue(json, GIQuestionnaire.class)));
  32. } catch (Exception e) {
  33. fail(e.getMessage());
  34. }
  35. }
  36.  
  37. // Questionnaire abstract base class
  38. @JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="type")
  39. @JsonSubTypes({
  40. @JsonSubTypes.Type(value=GIQuestionnaire.class, name="GIQuestionnaire"),
  41. @JsonSubTypes.Type(value=PolicyQuestionnaire.class, name="PolicyQuestionnaire")
  42. })
  43. public abstract class Questionnaire implements Serializable {
  44. @JsonManagedReference("questionnaire-questions")
  45. @JsonDeserialize(as = TreeSet.class, contentAs = Question.class)
  46.  
  47. private Set<Question> questions = new TreeSet<>();
  48.  
  49. // … remainder omitted for brevity
  50. }
  51.  
  52. // Question abstract base class
  53. @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
  54. @JsonSubTypes({
  55. @JsonSubTypes.Type(value = EntityQuestion.class, name = "EntityQuestion"),
  56. @JsonSubTypes.Type(value = IncludeExcludeQuestion.class, name = "IncludeExcludeQuestion")
  57. })
  58. @JsonDeserialize(using = QuestionDeserializer.class)
  59. public abstract class Question implements Comparable<Question>, Serializable {
  60. @JsonBackReference("questionnaire-questions")
  61. private Questionnaire questionnaire;
  62.  
  63. @JsonManagedReference("question-answers")
  64. @JsonDeserialize(as = TreeSet.class, contentAs = Answer.class)
  65. private Set<Answer> answers = new TreeSet<>();
  66.  
  67. // … remainder omitted for brevity
  68. }
  69.  
  70. // Answer abstract base class
  71. @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
  72. @JsonSubTypes({
  73. @JsonSubTypes.Type(value = EntityAnswer.class, name = "EntityAnswer"),
  74. @JsonSubTypes.Type(value = IncludeExcludeAnswer.class, name = "IncludeExcludeAnswer")
  75. })
  76. @JsonDeserialize(using = AnswerDeserializer.class)
  77. public abstract class Answer implements Comparable<Answer>, Serializable {
  78.  
  79. @JsonBackReference("question-answers")
  80. private Question question;
  81. // … remainder omitted for brevity
  82. }
  83.  
  84. public class QuestionDeserializer extends JsonDeserializer<Question> {
  85. @Override
  86. public Question deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
  87. //deserialize a Question to a concrete instance
  88. }
  89. }
  90.  
  91. public class AnswerDeserializer extends JsonDeserializer<Answer> {
  92. @Override
  93. public Answer deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
  94. //deserialize an Answer to a concrete instance
  95. }
  96. }
  97.  
  98. @Entity
  99. @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
  100. public class Answer { ....
  101.  
  102. @Entity
  103. @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
  104. public class Question { ....
  105.  
  106. <dependency>
  107. <groupId>com.fasterxml.jackson.core</groupId>
  108. <artifactId>jackson-core</artifactId>
  109. <version>2.0.2</version>
  110. </dependency>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement