2013-09-04 3 views
1

List에서 Json (Gson)으로의 변환 데이터에 문제가 있습니다. OneToMany와 ManyToOne.I 관계가있는 엔티티가 2 개 있는데 다른 게시물의 답변에서 솔루션을 사용하려고했지만 도움이되지 않았습니다.List to Json을 전송할 수 없습니다.

내 엔티티 및 오류에 대한 정보.

법인

@Entity 
    @Table(name = "Question") 
    public class Question implements Serializable{ 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private int id; 

    private String question; 

    @OneToMany(mappedBy="question") 
    private List<Answer> answers; 
    .....getters/setters 
    @Override 
    public String toString() { 
     return "Question [id=" + id + ", question=" + question + ", answers=" 
       + answers + "]"; 
    } 

응답 엔터티

@Entity 
public class Answer{ 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
// @GeneratedValue 
    private int id; 

    private String answer; 

    private byte isCorrect; 

    @ManyToOne 
    @JoinColumn(name="QuestionID") 
    private Question question; 
    .....getters/setters 
    @Override 
    public String toString() { 
     return "Answer {id:" + id + ", answer:" + answer + ", isCorrect:" 
       + isCorrect + "}"; 
    } 

DAO

@Repository 
@Transactional 
public class QuestionDAOImpl implements QuestionDAO { 

    @Autowired 
    private SessionFactory sessionFactory; 

    @SuppressWarnings("unchecked") 
// @Transactional 
    public List<Question> getQuestion() { 
     // TODO Auto-generated method stub 
     return sessionFactory.getCurrentSession().createQuery("from Question").list(); 
    } 
} 

컨트롤러

java.lang.StackOverflowError 
    com.google.gson.internal.$Gson$Types.equals($Gson$Types.java:158) 
    com.google.gson.reflect.TypeToken.equals(TypeToken.java:284) 
    java.util.HashMap.getEntry(Unknown Source) 
    java.util.HashMap.get(Unknown Source) 
    java.util.Collections$SynchronizedMap.get(Unknown Source) 
    com.google.gson.Gson.getAdapter(Gson.java:332) 
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:55) 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195) 
com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:892) 
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) 
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195) 
com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) 

0

@Controller 
public class QuestionController { 

    @Autowired 
    private QuestionService questionService; 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String home(Model model){ 
     List<Question> qu =questionService.getQuestion(); 
     Gson gson = new Gson(); 
    String m = gson.toJson(qu); 
    //Gson gs = new GsonBuilder().registerTypeAdapter(Question.class, myAdapter).create(); 
     System.out.println(qu); 
     return "home"; 
    } 
} 

GET 오류가 나는 answer

에서 솔루션을 얻을 지금

java.lang.IllegalArgumentException 

com.google.gson.internal.$Gson$Preconditions.checkArgument($Gson$Preconditions.java:42) 
     com.google.gson.GsonBuilder.registerTypeAdapter(GsonBuilder.java:448) 
     ua.home.rusliakov.web.QuestionController.home(QuestionController.java:71) 
     sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
     sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     java.lang.reflect.Method.invoke(Unknown Source) 

어쩌면 내가 뭔가 잘못 할 수있는 새로운 오류 을 얻었다.

Thx!

답변

0

개체 모델에주기가 있습니다. 질문에는 Answers와 Answer의 목록이 있으며 그 질문을 알고 있습니다. 이는 무한 길이의 JSON 문서가 될 것이므로 JSON에 직렬화 할 수 없습니다.

질문 및 답변 간의 관계를 단방향으로 모델화하거나 한 쪽을 "일시적"으로 표시해야만 작동합니다. 그러나 두 번째 방법은 JPA 처리에도 영향을 미칠 수 있으므로 첫 번째 방법에 대해 생각해 보는 것이 좋습니다. 당신은 정말로 양방향 관계가 필요합니까 아니면 질문이 대답을 알고 있지만 충분하지 않을 수도 있습니까?

관련 문제