Erro Retorno List encadeada Json no Vraptor

2 respostas
java
tiagosuleiman
public class Quiz extends DefaultEntity {

	private static final long serialVersionUID = 1L;

	@OneToMany(mappedBy = "quiz", fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
	private List<GroupQuestions> groupQuestions;
	
	public List<GroupQuestions> getGroupQuestions() {
		return groupQuestions;
	}

	public void setGroupQuestions(List<GroupQuestions> groupQuestions) {
		this.groupQuestions = groupQuestions;
	}

}

@Entity
@Table(name="Group_Questions")
public class GroupQuestions extends DefaultEntity {

	private static final long serialVersionUID = 1L;

	@Column(name="text")
	private String text;
	
	@Enumerated(EnumType.STRING)
	@Column(name = "formation")
	private FormationEnum formation;
	
	@OneToMany(mappedBy = "groupQuestions", fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
	private List<Question> question;

Metodo do meu controller

@Get
@Path(value = {"/", ""})
public void getQuestionnaires() {		
	result.use(json())
		  .withoutRoot()
		  .from(questionnaires.todosAtivos())
		  .include("groupQuestions")
                      .include("question")
                       .include("answers")
		  .serialize();
}

Não consigo retornar as listas (question, answers) dentro da lista de groupQuestions para Json

Meu Json esperado

{
	"groupQuestions": [{
		"text": "Continuidade aos Estudos",
		"formation": "GRADUACAO_COMPLETA",
		"question": [{
			"text": "Está cursando MBA?",
			"componentType": "RADIO",
			"answers": [{
				"text": "sim"
			}, {
				"text": "nao"
			}, {
				"text": "talvez"
			}]
		}]
	}]
}

ERRO:

Caused by: java.lang.IllegalArgumentException: Field path ‘question’ doesn’t exists in class br.umc.egressos.model.entities.Quiz
at br.com.caelum.vraptor.serialization.Serializee.getParentTypes(Serializee.java:145) [vraptor-4.1.4.jar:]
at br.com.caelum.vraptor.serialization.Serializee.getParentTypesFor(Serializee.java:129) [vraptor-4.1.4.jar:]
at br.com.caelum.vraptor.serialization.Serializee.includeAll(Serializee.java:118) [vraptor-4.1.4.jar:]
at br.com.caelum.vraptor.serialization.gson.GsonSerializer.include(GsonSerializer.java:126) [vraptor-4.1.4.jar:]

2 Respostas

K

Qual é o tipo de retorno do método questionnaires.todosAtivos() ?
Ao que indica, esse método retorna objetos tipo Quiz, e nessa classe não existe o campo “question” que você deu include na serialização JSON.

tiagosuleiman
@Entity
@Table(name = "Quiz")
public class Quiz extends DefaultEntity {

	private static final long serialVersionUID = 1L;

	@OneToMany(mappedBy = "quiz", fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
	private List<GroupQuestions> groupQuestions;
	
	public List<GroupQuestions> getGroupQuestions() {
		return groupQuestions;
	}

	public void setGroupQuestions(List<GroupQuestions> groupQuestions) {
		this.groupQuestions = groupQuestions;
	}

}

Kael, tudo bem cara, seguinte minha estrutura está assim:

Classe Quiz 
             # List<GroupQuestions> ===>  
                       # GroupQuestions contem outra lista que é
                                # List<Question>
                                          #Question contem outra lista que é
                                                 #List<Answers>

Até aqui eu consigo deserializar:

Classe Quiz 
             # List<GroupQuestions> ===>

Gerando o resultado:

colocando assim:
**result.use(json()).withoutRoot().from(questionnaires.todosAtivos()).include(“groupQuestions”).serialize();

Gera o JSON assim

[
  {
    "groupQuestions": [
      {
        "text": "Continuidade aos Estudos",
        "formation": "GRADUACAO_COMPLETA",
        "id": 5,
        "ativo": true
      }
    ],
    "id": 4,
    "ativo": true
  }
]

O erro acontece a partir da segunda lista encadeada dentro de a lista que está dente de GroupQuestions,
preciso saber como pegar a segunda(question) e terceira(answers) lista encadeada:

{
	"groupQuestions": [{
		"text": "Continuidade aos Estudos",
		"formation": "GRADUACAO_COMPLETA",
		"question": [{
			"text": "Está cursando MBA?",
			"componentType": "RADIO",
			"answers": [{
				"text": "sim"
			}, {
				"text": "nao"
			}, {
				"text": "talvez"
			}]
		}]
	}]
}
Criado 9 de setembro de 2016
Ultima resposta 9 de set. de 2016
Respostas 2
Participantes 2