映射@manyToOne不返回外键JSON

时间:2018-11-14 16:30:02

标签: java json rest

我有两个实体ProfileGroupUser的映射,其中用户与ProfileGroups有一个@OneToMany关系;

问题是我的要求的返回未在所有ProfileGroup的JSON要求中显示表ProfileGroup的外键fk_user。

个人资料组

    public class ProfileGroup {
...     
        @ManyToOne(fetch=FetchType.EAGER)
        @JoinColumn(name="fk_user_creator")
        @JsonBackReference
        private User userCreator;

...

用户

public class User {

    @OneToMany(mappedBy="userCreator")
    @JsonManagedReference
    private List<ProfileGroup> profileGroups;

资源类:

@GetMapping
    public ResponseEntity<?> listAll(){
        List<ProfileGroup> profileGroupsReturned = profileGroupRepository.findAll();

        return !profileGroupsReturned.isEmpty() ? ResponseEntity.ok(profileGroupsReturned) : ResponseEntity.noContent().build();

结果JSON :(不要显示FK_USER)

[
    {
        "id": 1,
        "name": "Calango Careta",
        "description": "Cadê? cadê? Nós somos a Orquestra Camaleônica do Calango Careta!!!!!!!!",
        "founded": "2015-04-12",
        "registered": "2018-11-14",
        "active": true
    },
    {
        "id": 2,
        "name": "Tropicaos",
        "description": "",
        "founded": "2018-01-20",
        "registered": "2018-11-14",
        "active": true
    },
    {
        "id": 3,
        "name": "Capivara Brass Band",
        "description": "",
        "founded": "2016-08-24",
        "registered": "2018-11-14",
        "active": false
    }
]

有什么主意吗?怎么了?

谢谢!!

1 个答案:

答案 0 :(得分:1)

问题 这就是JsonBackReference批注的作用,尽管由于您具有双向关系,如果删除它,则在尝试序列化对象时会遇到无限循环。

解决方案

  • 如果您真的不需要双向关系,那就摆脱它 通过删除关系(OnToMany或ManyToOne)
  • 您可以将BackReference交换给User,但是您将没有 在您的用户中序列化的组
  • 您可以使用@JsonIgnore,它与以前的功能相同 解决方案
  • 您可以开始使用单独的DTO进行序列化,而不是 序列化您的实体,在那里您可以控制关​​系和 确保您没有遇到无限的序列化循环
  • 您可以使用json属性过滤器来忽略将 导致无限循环,因此例如,如果您要序列化user, 您可以在个人资料属性上指定忽略其中的用户,这样 你打破循环