我正在学习Spring Boot Rest,但无法解决问题。有人能帮我吗? 我在Product和Category实体之间创建了以下映射:
类别实体:
@Entity
public class Category {
...
@JsonIgnore
@OneToMany(mappedBy="category")
private List<Product> products;
//getters setters
}
产品实体:
@Entity
@Table(name="lancamento")
public class Lancamento {
...
@NotNull
@ManyToOne
@JoinColumn(name="id_pessoa")
private Pessoa pessoa;
//getters setters
}
我等待这个结果:
{
"name":"Category_1",
"products":[
{
"id":"1",
"name":"Product_1"
},
{
"id":"2",
"name":"Product_2"
},
]
}
但实际结果是:
{
"name":"Category_1"
}
怎么了?我需要进行一些设置吗? 谢谢。
答案 0 :(得分:2)
尝试删除@JsonIgnore
批注。使用此注释,您可以告诉Spring在序列化/反序列化对象时基本上忽略该字段,因此它不会出现在输出中。
答案 1 :(得分:0)
您在类别的产品字段上具有JsonIgnore
答案 2 :(得分:0)
删除@JsonIgnore
注释。
由于有@JsonIgnore
注释,此列表被忽略了。
请参阅此https://fasterxml.github.io/jackson-annotations/javadoc/2.5/com/fasterxml/jackson/annotation/JsonIgnore.html以了解@JsonIgnore
。
答案 3 :(得分:0)
您必须移动@JsonIgnore并使用DTO对象进行序列化。无论如何,这是创建API的正确方法。您可以根据需要合并和转换DTO中实体的所有数据。
OR
您可以将反向关系(字段)设置为Product对象,例如
@JsonIgnore
@ManyToOne
private Category category;
并用@Json标记忽略该字段。
由您决定,但是更好的方法是使用DTO
答案 4 :(得分:0)
非常感谢,我在Infinite Recursion with Jackson JSON and Hibernate JPA issue找到了解决方案
这种情况的解决方案是使用Jackson批注:@JsonManagedReference和@JsonBackReference。
类别:
@Entity
public class Category {
...
@JsonManagedReference
@OneToMany(mappedBy="category")
private List<Product> products;
//getters setters
}
产品
@Entity
public class Product {
...
@JsonBackReference
@NotNull
@ManyToOne
@JoinColumn(name="id_product")
private Product product;
//getters setters
}
这就像我需要的那样。