多对多关系,多对一关系JSON序列化进入死循环导致java.lang.IllegalStateException异常

在做项目的时候遇到一个错误java.lang.IllegalStateException: Cannot call sendError() after the response has been committed,这个错误在我的项目里是因为:项目中两个多对多关联的实体是双向关联导致了死循环。

public class Duty{
     .......
        @ManyToMany(cascade = CascadeType.REFRESH)
        @ApiModelProperty(value = "系统",name = "infoSystemEntityList",hidden=true)
        private List<InfoSystemEntity> infoSystemEntityList;
    }
public class Infosystem{
     ......
      @ManyToMany(cascade = CascadeType.REFRESH)
      @ApiModelProperty(value = "职责",name = "dutyCatalogueEntityList",hidden=true)
      private List<DutyCatalogueEntity> dutyCatalogueEntityList;
    }

这种双向的关联导致了在序列化的时候会进入无限递归,一般用如下几种办法解决。

1. @JsonBackReference注解标在多对一或者多对多的属性上

@JsonBackReference
@ManyToMany(cascade = CascadeType.REFRESH)
@ApiModelProperty(value = "系统",name = "infoSystemEntityList",hidden=true)
 private List<InfoSystemEntity> infoSystemEntityList;

@JsonBackReference:被它标注的属性在序列化时会被忽略

2. @JsonIgnore注解标在多对一或者多对多的属性上

@JsonIgnore
@ManyToMany(cascade = CascadeType.REFRESH)
@ApiModelProperty(value = "系统",name = "infoSystemEntityList",hidden=true)
 private List<InfoSystemEntity> infoSystemEntityList;

@JsonIgnore:直接忽略掉这个属性,序列化和反序列化都会被忽略。在父子关系中,当反序列化时,@JsonIgnore不会自动注入被忽略的属性值(父或子)

3. @JsonIgnoreProperties注解

@JsonIgnoreProperties(value = {"infoSystemEntityList"})
public class Duty{
     .......
        @ManyToMany(cascade = CascadeType.REFRESH)
        @ApiModelProperty(value = "系统",name = "infoSystemEntityList",hidden=true)
        private List<InfoSystemEntity> infoSystemEntityList;
    }

@JsonIgnoreProperties:直接写在实体类上面value里写出要忽略的字段即可,序列化和反序列化都会被忽略

PS:需要注意一点,这三个注解都会在结果的JSON中屏蔽掉这字段,如果前端需要该字段数据,需要用别的办法传给前端。

有待补充…

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值