Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Play Framework renderJSON提供调用TargetException_Java_Json_Playframework - Fatal编程技术网

Java Play Framework renderJSON提供调用TargetException

Java Play Framework renderJSON提供调用TargetException,java,json,playframework,Java,Json,Playframework,我正在尝试使用Play的renderJSON函数以JSON格式呈现用户对象。然而,当我调用它时,我得到一个InvocationTargetException:null错误 在调试过程中,我发现我在initial-data.yml文件中为用户的出生日期指定的值就是原因。详情如下: User(bob): firstName: Bob lastName: Bobson dob: 1979-01-01 但是,如果我以编程方式创建一个用户,并使用new Date()构造函数设置其dob,则对

我正在尝试使用Play的renderJSON函数以JSON格式呈现用户对象。然而,当我调用它时,我得到一个InvocationTargetException:null错误

在调试过程中,我发现我在initial-data.yml文件中为用户的出生日期指定的值就是原因。详情如下:

User(bob):
  firstName: Bob
  lastName: Bobson
  dob: 1979-01-01
但是,如果我以编程方式创建一个用户,并使用new Date()构造函数设置其dob,则对象呈现时不会出现问题。我甚至试过
dob:!!java.util.Date“1979-01-01”
如SnakeYML文档()中所述,但无效


我在这里做错了什么?

真棒!我明白了!在阅读了大约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
 }
}
/*************型号****************/
班主任{
@暴露
公共信息;
@暴露
公共字符串名称;
@暴露
@OneToMany(mappedBy=“所有者”)
公犬;
//构造函数和其他代码
}
班犬{
@暴露
公共字符串名称;
@manytone(fetch=FetchType.Eager)
公众人物所有者;
//构造函数和其他代码
}
/**************控制器********************/
公共类应用程序扩展控制器{
public static Gson Gson=GsonBuilder.excludeFieldsWithoutExposeAnnotation().create;
公共静态无效所有人(){
List people=Person.findAll();
renderJSON(gson.toJson(people));
//应该注意错误
}
}
使用@Expose注释在渲染时禁用双向关系的一侧肯定解决了这个问题。现在我只需要想办法解决这个新的半单边结构

在发现这个技巧之前,我使用的另一个库是。我可能会回到它,这取决于以后在应用程序中的处理方式,因为它可以很好地处理双向关系,而不需要您“静音”一侧。它(对我来说)也比格森图书馆更优雅


因此,非常感谢@emt14提供的所有帮助。我希望这篇文章能帮助其他人。

你能发布你的控制器/模板/模型代码吗?是的,我使用FlexJSON比使用GSON更开心。