Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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 Spring Rest服务prodouces JSON,但不适用于使用db映射的对象_Java_Json_Spring_Rest_Spring Mvc - Fatal编程技术网

Java Spring Rest服务prodouces JSON,但不适用于使用db映射的对象

Java Spring Rest服务prodouces JSON,但不适用于使用db映射的对象,java,json,spring,rest,spring-mvc,Java,Json,Spring,Rest,Spring Mvc,我花了几个小时才意识到问题是什么: 我有一个springrest服务和一个GET方法,它以JSON格式返回用户。 数据来自sessionFactory上的数据库 调试后发现,问题与我的双向一对一多对一关系有关 这么叫 User user = (User) sessionFactory.getCurrentSession().load(User.class, userId); 返回User.getCity.getSupplier运行到com.sun.jdi.InvocationE

我花了几个小时才意识到问题是什么:

我有一个springrest服务和一个GET方法,它以JSON格式返回用户。 数据来自sessionFactory上的数据库

调试后发现,问题与我的双向一对一多对一关系有关

这么叫

        User user = (User) sessionFactory.getCurrentSession().load(User.class, userId);
返回User.getCity.getSupplier运行到com.sun.jdi.InvocationException的用户对象。因此,Jackson显然无法序列化。 但是什么导致了这种例外

@Entity
@Table(name = "T_CITY")
public class City implements Serializable {

private static final long serialVersionUID = 1L;

@Id
private long id;

@OneToMany(mappedBy = "city", cascade=CascadeType.ALL)
private Set<User> user;

@OneToMany(mappedBy = "city", cascade=CascadeType.ALL)
private Set<Supplier> supplier;
供应商:

@Entity
@Table(name = "T_SUPPLIER")
public class Supplier implements Serializable {

private static final long serialVersionUID = 1L;

@Id
private long id;

@ManyToOne
private City city;

正如在另一个答案中提到的,我认为您会发现您的问题与x-to-x关系有关。这有时会在尝试jsonify实体bean时产生循环引用问题

有时,您可以通过使用注释来避免或克服这一问题,有时则需要一个包装器类。我通常只编写一个包装器类来处理JSON事务

有很多关于这类问题的参考文献,涉及多种语言。这里有几个起点供您研究


若您将日志转到调试,您应该可以看到服务器端发生了什么。您使用的是ORM框架吗?getUser方法是否返回延迟加载的实体?请显示用户类的源代码您是否有到城市中用户的反向映射?
@Entity
@Table(name = "T_SUPPLIER")
public class Supplier implements Serializable {

private static final long serialVersionUID = 1L;

@Id
private long id;

@ManyToOne
private City city;