尤里卡!我懂了!在閱讀了大約9個小時的無盡SO問題之後,我終於通過我厚厚的頭骨瞭解到錯誤的原因不是因爲日期格式,而是因爲默認的Gson渲染器不能很好地(默認情況下)使用雙向釋放,例如@OneToMany和@ManyToOne。
我的解決方案?當將對象呈現爲JSON的時間到來時,「關閉」關係的一側。使用這裏找到的信息:User Defined Exclusion Strategies我已經想出了以下解決方案。
/***************** 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。我希望這篇文章可以幫助別人。
你可以發佈你的控制器/模板/模型代碼。 – emt14