未提取的实体出现在JSON结果中

时间:2019-07-16 10:23:20

标签: spring hibernate jackson

我有一个用户实体:

@Entity(name = "users")
@DynamicUpdate
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    @JsonIgnore
    @JsonIgnoreProperties("user")
    private Set<Car> cars;
}

和汽车实体:

@Entity(name = "cars")
@DynamicUpdate
public class Car implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column(name = "plate_number")
    @JsonView(View.Summary.class)
    private String plateNumber;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="user_id")
    @JsonIgnore
    @JsonManagedReference("user-coordinate")
    @Access(value = AccessType.FIELD)
    private User user;
}

当我得到汽车清单时,我得到这个:

{
            "id": 5,
            "plateNumber": "aaaaada",
            "user": {
                "id": 110,
                "name": null
            }
        },

但是我想得到这个(没有用户实体!):

{
            "id": 5,
            "plateNumber": "aaaaada",
        },

我在PHP方面有7年的经验(我知道我很熟悉如何搜索并获得所需的东西),但是我是java spring的初学者,我为寻找答案得到了很多东西,就是它与杰克逊(Jackson)有关,但我不知道如何解决它,请提供详细信息给我,我将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:1)

您正在使用@JsonManagedReference(“ user-coordinate”)覆盖@JsonIgnore

JsonManagedReference指示Jackson在对汽车进行序列化时对用户进行序列化,因此,如果您不希望对用户进行序列化,则需要将其删除,以便进行@JsonIgnore

答案 1 :(得分:0)

对于有两个问题的人,我使用的JsonIgnore有两个依赖项:

org.codehaus.jackson.annotate

那是我将其更改为的问题:

com.fasterxml.jackson.annotation

问题解决了