如何根据其余请求使用@JsonIgnore

问题描述 投票:0回答:2

注意:为了重点关注问题,未包含不同的概念。在 API 请求中使用实体通常是不正确的。在此示例中,API 架构中使用了实体来仅关注问题。

我正在使用 JPA 制作一些示例。

当我建立关系时,我必须使用

@JsonIgnore
。当我不使用 JsonIgnore 时,它进入无限循环并给出序列化错误。然后我通过向相关字段添加
@JsonIgnore
注释解决了我的问题。

但是,例如,当我想将所有使用分行编号 1 和分行编号 1 的用户引入时,我无法返回该列表,因为它用

@JsonIgnore
对其进行了标记。我可以根据剩余请求过滤
@JsonIgnore
标记吗?

如果发出 POST 请求,

@JsonIgnore
应该可以工作,但如果发出 GET 请求,
@JsonIgnore
应该处于非活动状态。

@Entity
@Getter
@Setter
public class Account {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private double balance;

    @ManyToOne
    @JoinColumn(name = "branchCode")
    private Branch branch;
}
@Entity
@Getter
@Setter
public class Branch {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String address;
    @Column(unique = true)
    private Integer branchCode;
    @OneToMany(mappedBy = "branch")
    @JsonIgnore
    private List<Account> accounts;
}

添加分支(POST方法)



获取帐户(POST 方法)


获取账户信息(获取方法)


获取分支(获取方法)


java spring spring-boot rest spring-data-jpa
2个回答
0
投票

可以在运行时添加和删除注释。查看有关该主题的这篇文章。这里的想法是,您可以在 POST 调用期间设置注释,并在 GET 调用期间删除注释。

我不知道这是否适用于 Jackson 或您的用例,但您的问题具体与“有条件地使用 @JsonIgnore 对象”相关。您可以通过实验来确定这种方法是否有效,并希望报告您的结果。


0
投票

如果您坚持对每个响应使用相同的实体,如果响应不同,@JsonIgnore 不是您应该采取的最佳方法,相反,您可以使用 @JsonView 并将每个字段分配给特定视图(字段可以是分配给多个视图),然后您可以在端点之上指定它应该在渲染中使用什么视图,您应该看看该注释 @JsonView ,希望它有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.