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

@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;

}

有没有办法实现这种行为?


GCT1015
浏览 135回答 3
3回答

沧海一幻觉

为避免循环引用无限递归(stackoverflow 错误),您必须使用 @JsonIdentityInfo 注释cals所以你的课看起来像:@JsonIdentityInfo(&nbsp; &nbsp; &nbsp; &nbsp;generator = ObjectIdGenerators.PropertyGenerator.class,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;property = "id")class A {&nbsp; &nbsp; //some fields&nbsp; &nbsp; //Integer id;&nbsp; &nbsp; @OneToMany private B b; //if only A is requested, this should NOT be ignored&nbsp; &nbsp;&nbsp;}B类双向使用也是如此:@JsonIdentityInfo(&nbsp; &nbsp; &nbsp; &nbsp;generator = ObjectIdGenerators.PropertyGenerator.class,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;property = "id")class B {&nbsp; &nbsp; //some fields&nbsp; &nbsp; @ManyToOne&nbsp; &nbsp; @IgnorePrivateBInAToAvoidStackOverflow&nbsp; &nbsp; private Set<A> collectionOfAs;}&nbsp;请注意,property指的是您的唯一字段名称(id 在此示例中设置为)

婷婷同学_

您对@ManyToOne&的使用@OneToMany不正确,您必须在实体集合属性上的实体@OneToMany内使用,反之亦然OneMany@ManyToOneclass A {&nbsp; &nbsp; @ManyToOne&nbsp;&nbsp; &nbsp; @JsonBackReference&nbsp; &nbsp; private B b;}class B {&nbsp; &nbsp; @OneToMany&nbsp; &nbsp; @JsonManagedReference&nbsp; &nbsp; private Set<A> collectionOfAs;}并且据我所知,您想忽略所有者B从 class 进行反向引用A,并创建一个 stackoverflow 异常,以使用我在上面的示例中添加的注释来实现这一点,@JsonBackReference这@JsonManagedReference将停止无限在它的轨道上循环。

杨魅力

如果 B 类有一个 A 类的集合,那么 B 类中的 A 的集合应该被注释@OneToMany,并且 A 类中的字段应该被注释@ManyToOne,那么你可以@JsonIgnore像这样把你放在集合上:class A {&nbsp; &nbsp; //some fields&nbsp; &nbsp; @ManyToOne private B b; //if only A is requested, this should NOT be ignored&nbsp; &nbsp;&nbsp;}class B {&nbsp; &nbsp; //some fields&nbsp; &nbsp; @OneToMany&nbsp; &nbsp; @JsonIgnore&nbsp; &nbsp; private Set<A> collectionOfAs;}我的猜测是您收到 StackOverflow 错误,因为当您获取 B 类的某个对象时,它带来了 As 类的对象集,它们本身带来了最初获取的 B 类的相同对象,这将去无限,除非您在 Set 字段上提供 @JsonIgnore。这样,当你调用 A 类的对象时,它们 B 类的字段对象也会被获取,但是当你调用 B 类的对象时,它们的 As 类集合将被忽略。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java