如何仅在某些情况下限制使用@JsonIgnore?

时间:2019-01-18 14:52:29

标签: json spring

我使用@JsonIgnore来避免圈子依赖。

现在我要解决的情况是,如何将@JsonIgnore批注的有效性仅限于特定情况。

有下表(请参见图片):

雇员(雇员的实例可以与其他雇员具有1:N雇员:经理关系-自我加入)
工作分配-每个员工可以分配更多工作

您可以在JSON中看到,同时显示了员工和经理的职位。 我只想显示员工的工作分配,但是我认为,如果我添加@JsonIgnore,则员工和经理的职责都将消失。

我想从JSON中删除只是嵌套的

如果经理是公司的首席执行官(因此他是自己的经理),则由于圈子依赖问题而什么也没显示。我猜想JsonIgnore会导致什么都不会显示(实际上我想显示信息1x,而不是0x或无穷大时间)

如何解决这个问题?

数据库图片(不允许直接发布):https://i.ibb.co/LQmtgL3/s.jpg

JSON向我展示

{
    "id": 2,
    "firstName": "Kim",
    "lastName": "Johansson",
    "emailAddress": "kim.johansson@gmail.com",
    "manager": {
        "id": 1,
        "firstName": "Miia",
        "lastName": "Selänne",
        "emailAddress": "miia.salanne@gmail.com",
        "assignments": [
            {
                "id": 1,
                "seniority": "1",
                "startAssignment": "2015-01-01",
                "endAssignment": null,
                "allocation": 100,
                "role": {
                    "id": 4,
                    "name": "Manager"
                },
            }
        ],
    },
    "assignments": [
        {
            "id": 2,
            "seniority": "1",
            "startAssignment": "2019-01-01",
            "endAssignment": "2019-04-30",
            "allocation": 50,
            "role": {
                "id": 1,
                "name": "Java BE Developer"

        },
        {
            "id": 3,
            "seniority": "1",
            "startAssignment": "2019-01-01",
            "endAssignment": "2019-04-30",
            "allocation": 50,
            "role": {
                "id": 2,
                "name": "Java Fullstack Developer"
            },

        },

    ],

Employee.java

(...)
@OneToMany(mappedBy = "employee", fetch = FetchType.EAGER)
@JsonManagedReference
private List<Assignment> assignments;
(...)

Assignment.java

(...)
    @ManyToOne
    @JoinColumn(name = "employee_id")
    @JsonBackReference
    private Employee employee;
(...)

0 个答案:

没有答案