List から Json(Gson) へのデータの変換に問題があります。OneToMany と ManyToOne の関係を持つ 2 つのエンティティがあります。他の投稿の回答からソリューションを使用しようとしましたが、役に立ちませんでした。
私のエンティティとエラーに関するいくつかの情報。
実在物
@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 + "}";
}
ダオ
@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();
}
}
コントローラ
@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";
}
}
エラーを取得する
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)
そして今、新しいエラーが発生しました
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)
多分私は何か間違ったことをするでしょう。
どうも!