在我的Spring Data Rest应用程序中,@JsonBackReference
在定义excerptProjection
时被忽略。
调用GET /foos/{id}
时我会得到回复:(此处省略_link
个元素)
{
"text": "Foo",
"additionalText": "Additional Text",
"bar": {
"text": "Bar",
"_embedded": {
"foo": {
"text": "Foo",
"bar": {
"text": "Bar"
}
}
}
}
}
鉴于:
@Entity
public class Foo {
@Id
@GeneratedValue
private Long id;
private String text;
private String additionalText;
@JsonManagedReference
@OneToOne(mappedBy = "foo", cascade = ALL)
private Bar bar;
}
和
@Entity
public class Bar {
@Id
@GeneratedValue
private Long id;
private String text;
@JsonBackReference
@OneToOne
private Foo foo;
}
使用存储库:
@RepositoryRestResource(excerptProjection = FooPublicProjection.class)
public interface FooRepository extends CrudRepository<Foo, Long> {}
如果删除excerptProjection
定义,我会得到以下结果:
{
"text": "Foo",
"additionalText": "Additional Text",
"bar": {
"text": "Bar"
}
}
如何让Spring Data Rest不在其自己的子节点中呈现Foo
,我该怎么办?
答案 0 :(得分:0)
这是一个解决方案,提供你使用杰克逊(我猜你这样做)。 在我的项目中,我使用JSOG来处理所有循环关系。我认为它也可以解决你的问题。
@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;
}
请注意,如果您的客户端是javascript,那么可以使用补充的JSOG库来解析您的JSON并自动解决周期。