尤里卡!我懂了!在阅读了无休止的 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 的所有帮助。我希望这篇文章可以帮助其他人。