为了账号安全,请及时绑定邮箱和手机立即绑定

如果从实体关系调用 JsonIgnore 属性

如果从实体关系调用 JsonIgnore 属性

GCT1015 2022-05-21 20:36:42
@JsonIgnore如果它们是从其他实体的集合中序列化的(多对一),我正在尝试有条件地从实体中获取某些字段。我试图添加@JsonIgnoreProperties到集合中,但据我所知,注释不是为了这个目的。class A {    //some fields    @ManyToOne private B b; //if only A is requested, this should NOT be ignored    }class B {    //some fields    @OneToMany    @IgnorePrivateBInAToAvoidStackOverflow    private Set<A> collectionOfAs;}有没有办法实现这种行为?
查看完整描述

3 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

为避免循环引用无限递归(stackoverflow 错误),您必须使用 @JsonIdentityInfo 注释cals


所以你的课看起来像:


@JsonIdentityInfo(

       generator = ObjectIdGenerators.PropertyGenerator.class, 

       property = "id")

class A {

    //some fields

    //Integer id;



    @OneToMany private B b; //if only A is requested, this should NOT be ignored    

}

B类双向使用也是如此:


@JsonIdentityInfo(

       generator = ObjectIdGenerators.PropertyGenerator.class, 

       property = "id")

class B {

    //some fields


    @ManyToOne

    @IgnorePrivateBInAToAvoidStackOverflow

    private Set<A> collectionOfAs;

请注意,property指的是您的唯一字段名称(id 在此示例中设置为)


查看完整回答
反对 回复 2022-05-21
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

您对@ManyToOne&的使用@OneToMany不正确,您必须在实体集合属性上的实体@OneToMany内使用,反之亦然OneMany@ManyToOne


class A {


    @ManyToOne 

    @JsonBackReference

    private B b;

}


class B {


    @OneToMany

    @JsonManagedReference

    private Set<A> collectionOfAs;

}

并且据我所知,您想忽略所有者B从 class 进行反向引用A,并创建一个 stackoverflow 异常,以使用我在上面的示例中添加的注释来实现这一点,@JsonBackReference这@JsonManagedReference将停止无限在它的轨道上循环。


查看完整回答
反对 回复 2022-05-21
?
杨魅力

TA贡献1811条经验 获得超6个赞

如果 B 类有一个 A 类的集合,那么 B 类中的 A 的集合应该被注释@OneToMany,并且 A 类中的字段应该被注释@ManyToOne,那么你可以@JsonIgnore像这样把你放在集合上:


class A {

    //some fields


    @ManyToOne private B b; //if only A is requested, this should NOT be ignored    

}


class B {

    //some fields



    @OneToMany

    @JsonIgnore

    private Set<A> collectionOfAs;

}

我的猜测是您收到 StackOverflow 错误,因为当您获取 B 类的某个对象时,它带来了 As 类的对象集,它们本身带来了最初获取的 B 类的相同对象,这将去无限,除非您在 Set 字段上提供 @JsonIgnore。这样,当你调用 A 类的对象时,它们 B 类的字段对象也会被获取,但是当你调用 B 类的对象时,它们的 As 类集合将被忽略。


查看完整回答
反对 回复 2022-05-21
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信