我有一个Spring REST Web应用程序。我有一个返回响应实体的方法。
@RequestMapping(value = "/shoes", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> getShoes() {
Collection<Shoes> shoes = shoesService.findAll();
ResponseEntity responseEntity = new ResponseEntity<>(shoes, HttpStatus.OK);
return responseEntity;
}
当我在最后一行设置断点时,我可以看到responseEntity
包含以下对象的列表:
鞋子{id = 1,本地化=本地化{id = 1,城市='丹佛'},类别=类别{id = 1,名称='井口',群组='男性'},尺寸= 9} < / p>
但是当我在客户端应用程序中发送请求时,我得到一个JSON,其中只包含id和size:
{
"id": 1,
"size": 9
}
我想知道为什么我没有收到本地化和类别。
以下是Shoes
类:
@Table(name = "shoes")
public class Shoes{
@Column(name = "id")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@JsonBackReference
@ManyToOne
private Localization localization;
@JsonBackReference
@ManyToOne
private Category category;
@Column(name = "size")
private int size;
...
}
答案 0 :(得分:0)
如果你有双向关联,你必须声明哪个对象具有父对象的作用(用JsonManagedReference
注释)并且具有子角色(用JsonBackReference
注释)来打破周期。
您注释了两个属性(localization
,category
)未被序列化,请参阅JsonBackReference
:
用于指示关联属性是字段之间双向链接的一部分的注释;并且它的作用是“孩子”(或“后退”)链接。属性的值类型必须是bean:它不能是Collection,Map,Array或枚举。处理链接,使得使用此批注注释的属性不是序列化的;在反序列化期间,其值设置为具有“托管”(转发)链接的实例。