ユーレカ!私はそれを持っている!無限のSO質問を約9時間読んだ後、私はついに私の厚い頭蓋骨を通り抜けました。エラーは日付形式ではなく、デフォルトのGsonレンダラーが次のような双方向の関係ではうまく機能しないためです。 @OneToManyおよび@ManyToOne。
私の解決策は?オブジェクトをJSONとしてレンダリングするときが来たら、関係の片側を「ミュート」します。ここにある情報を使用して:ユーザー定義の除外戦略私は次の解決策を考え出しました。
/***************** Models ****************/
class Person {
@Expose
public int age;
@Expose
public String name;
@Expose
@OneToMany(mappedBy="owner")
public Dog dog;
//Constructors and other code
}
class Dog {
@Expose
public String name;
@ManyToOne(fetch=FetchType.Eager)
public Person owner;
//Constructor and other code
}
/**************Controller********************/
public class Application extends Controller {
public static Gson gson = GsonBuilder.excludeFieldsWithoutExposeAnnotation().create;
public static void allPersons() {
List<Person> people = Person.findAll();
renderJSON(gson.toJson(people));
//Error should be taken care of
}
}
@Exposeアノテーションを使用して、レンダリング時に双方向関係の片側をミュートすると、問題は確実に解決されました。ここで、この新しい半片側構造を回避する方法を理解する必要があります。
このヒントを見つける前に使用した別のライブラリはFlexJSONでした。片側を「ミュート」する必要がなく、双方向の関係でうまく機能するため、アプリケーションの後半でどのように処理されるかによっては、それに戻る可能性があります。また、(私にとっては)Gsonライブラリよりもエレガントです。
ですから、@emt14のすべての支援に感謝します。この投稿が他の人の助けになることを願っています。