gpt4 book ai didi

java - 使用 excerptProjection 时 @JsonBackreference 被忽略

转载 作者:太空宇宙 更新时间:2023-11-04 11:43:36 25 4
gpt4 key购买 nike

在我的 Spring Data Rest 应用程序中,定义 excerptProjection 时,@JsonBackReference 将被忽略。

调用 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

最佳答案

这是一个解决方案,前提是您正在使用 Jackson(我猜您是这样做的)。在我的项目中,我使用了 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 并解析循环。

关于java - 使用 excerptProjection 时 @JsonBackreference 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42551724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com