Java Spring Rest服务prodouces JSON,但不适用于使用db映射的对象
我花了几个小时才意识到问题是什么: 我有一个springrest服务和一个GET方法,它以JSON格式返回用户。 数据来自sessionFactory上的数据库 调试后发现,问题与我的双向一对一多对一关系有关 这么叫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
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;