Java @使用摘录投影时忽略JsonBackreference

Java @使用摘录投影时忽略JsonBackreference,java,spring-data-rest,Java,Spring Data Rest,在我的Spring数据Rest应用程序中,当定义了摘录投影时,@JsonBackReference被忽略 调用GET/foos/{id}I GET as response:(\u link元素在此省略) 鉴于: @Entity public class Foo { @Id @GeneratedValue private Long id; private String text; private String additionalText;

在我的Spring数据Rest应用程序中,当定义了
摘录投影时,
@JsonBackReference
被忽略

调用
GET/foos/{id}
I GET as response:(
\u link
元素在此省略)

鉴于:

@Entity
public class Foo {

    @Id
    @GeneratedValue
    private Long id;

    private String text;

    private String additionalText;

    @JsonManagedReference
    @OneToOne(mappedBy = "foo", cascade = ALL)
    private Bar bar;
}

使用存储库:

@RepositoryRestResource(excerptProjection = FooPublicProjection.class)
public interface FooRepository extends CrudRepository<Foo, Long> {}

如何使Spring数据不在其自己的子节点中呈现
Foo

这是一个解决方案,前提是您正在使用Jackson(我想您是这样做的)。 在我的项目中,我曾经处理所有循环关系。我认为它也能解决你的问题

@Entity
@JsonIdentityInfo(generator = JSOGGenerator.class)
public class Foo {

    @Id
    @GeneratedValue
    private Long id;

    private String text;

    private String additionalText;

    @JsonManagedReference
    @OneToOne(mappedBy = "foo", cascade = ALL)
    private Bar bar;
}
以及:


请注意,如果您的客户机是javascript,那么有一个互补的JSOG库可以自动解析JSON和解析循环。

如果您使用Jackson(我想您是这样做的),这是一个解决方案。 在我的项目中,我曾经处理所有循环关系。我认为它也能解决你的问题

@Entity
@JsonIdentityInfo(generator = JSOGGenerator.class)
public class Foo {

    @Id
    @GeneratedValue
    private Long id;

    private String text;

    private String additionalText;

    @JsonManagedReference
    @OneToOne(mappedBy = "foo", cascade = ALL)
    private Bar bar;
}
以及:

请注意,如果您的客户机是javascript,那么有一个互补的JSOG库可以自动解析JSON和解析循环

{
  "text": "Foo",
  "additionalText": "Additional Text",
  "bar": {
    "text": "Bar"
  }
}
@Entity
@JsonIdentityInfo(generator = JSOGGenerator.class)
public class Foo {

    @Id
    @GeneratedValue
    private Long id;

    private String text;

    private String additionalText;

    @JsonManagedReference
    @OneToOne(mappedBy = "foo", cascade = ALL)
    private Bar bar;
}
@Entity
@JsonIdentityInfo(generator = JSOGGenerator.class)
public class Bar {

    @Id
    @GeneratedValue
    private Long id;

    private String text;

    @JsonBackReference
    @OneToOne
    private Foo foo;
}