小白笔记3:@RestController返回Json数据遇到的问题及解决办法

在做项目时,在RestController注解下的控制器出现了异常,提示栈溢出。经过排查,发现是两个对象有相互包含关系且一对多。

  1. Order类
private int id;

private List<OrderItem> orderitems;
  1. OrderItem类
private int id;

private Order order;

出现原因
当控制器开始被调用,Spring MVC的Restful注解把order对象转换为Json格式的同时会把对应的orderitems转换为Json数组,而orderitems又包含一个order属性,这个属性又会被转换为Json对象,然后无限递归下去导致栈溢出系统报错…

解决办法

  1. @JsonIgnoreProperties
    可以使用@JsonIgnoreProperties注解,该注解的作用就是在bean进行序列化的同时忽略掉一些属性,但存在一个问题就是如果后面要用Redis进行整合的话可能会出现一定Bug
  2. Service层提供Romove( )方法
    这里我是提供了一个removeOrderFromOrderItem()方法,当order拿到它的orderitems属性 时,将这些orderitems的order属性置空
 private void removeOrderFromOrderItem(Order order) {
     
  List<OrderItem> orderItems= order.getOrderItems();
  for (OrderItem orderItem : orderItems) {
     
   orderItem.setOrder(null);
  }
 }

`

你可能感兴趣的:(问题解决总结)