响应实体和客户端响应不同

时间:2016-11-05 16:56:21

标签: java json spring hibernate jackson

我有一个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;

    ...
}

1 个答案:

答案 0 :(得分:0)

如果你有双向关联,你必须声明哪个对象具有父对象的作用(用JsonManagedReference注释)并且具有子角色(用JsonBackReference注释)来打破周期。

您注释了两个属性(localizationcategory)未被序列化,请参阅JsonBackReference

  

用于指示关联属性是字段之间双向链接的一部分的注释;并且它的作用是“孩子”(或“后退”)链接。属性的值类型必须是bean:它不能是Collection,Map,Array或枚举。处理链接,使得使用此批注注释的属性不是序列化的;在反序列化期间,其值设置为具有“托管”(转发)链接的实例。