当前位置: 首页 > 知识库问答 >
问题:

无法获得json:无限递归

苏昂雄
2023-03-14

在尝试执行GET到发布者存储库时,我正在执行GET和无限循环。

出版商:

@Data
@AllArgsConstructor
@Entity
@Table(name = "publisher")
public class Publisher {

    @Id
    private Long publisherID;

    private String name;
    private String location;

    public Publisher(@JsonProperty("publisherID") Long publisherID,
                     @JsonProperty("name") String name,
                     @JsonProperty("location") String location) {
        this.publisherID = publisherID;
        this.name = name;
        this.location = location;
    }

    @JsonManagedReference(value="Book-Publisher")
    @OneToMany(mappedBy = "publisher", cascade = CascadeType.ALL)
    private Set<Book> books;

    public Publisher() {
    }
}

书:

@Data
@AllArgsConstructor
@Entity
@Table(name = "book")
public class Book {

    @Id
private String name;

@JsonBackReference(value="Book-Publisher")
@ManyToOne
@JoinColumn(name="publisherID")
private Publisher publisher;

private int publicationYear;
private int amount;

@JsonManagedReference(value="BookAuthors-Book")
@OneToMany(mappedBy = "book", cascade = CascadeType.ALL)
private Set<BookAuthors> bookAuthors;

@JsonManagedReference(value="BookGenres-Book")
@OneToMany(mappedBy = "book", cascade = CascadeType.ALL)
private Set<BookGenres> bookGenres;

public Book(@JsonProperty("id") Long id,
            @JsonProperty("name") String name,
            @JsonProperty("publisherID") Long publisherID,
            @JsonProperty("publicationYear") int publicationYear,
            @JsonProperty("amount") int amount) {
    this.id = id;
    this.name = name;
    this.publicationYear = publicationYear;
    this.amount = amount;
    PublisherService publisherService = BeanUntil.getBean(PublisherService.class);
    this.publisher = publisherService.findByID(publisherID).get();

}
@JsonManagedReference(value="RentedBook-Book")
@OneToMany(mappedBy = "book", cascade = CascadeType.ALL)
private Set<RentedBook> rentedBooks;

public Book() {
}

完整代码可在此处获得:

https://github.com/vanyasav/library

共有1个答案

艾凌龙
2023-03-14

当为响应序列化publisher列表时,将调用publisher字段的所有getter方法。因此,publisher关系字段books的getter也被调用来设置值。这是递归发生的,这就是无限递归的原因。

最好不要使用实体作为响应。为publisher创建一个DTO类,然后将publisher实体值映射到DTO中,然后发送响应。

要将一个模型动态映射到另一个模型,可以使用modlemapper

 类似资料:
  • 我用的是Spring Roo 1.2.1和Jackson 1.9.7。在使用json序列化我的类时,我得到了一个JsonMappingException。 我读了以下帖子,但没有找到适合我的工作解决方案: Jackson的无限递归 Jackson-具有双方向关系的实体序列化(避免循环) 我不知道为什么JsonIgnore在属性QueueOuts的类Queue中不起作用。我也尝试了JsonManag

  • 我正在尝试用spring Security授权用户。到目前为止,我能够通过ldap对它们进行身份验证,但还无法获得授权。 我还将ldap与Apache Directory Studio连接起来,查询用户信息,可以在用户中找到权限。但spring security ldap配置无法收集它们。 下面是application-config.xml的ldap部分:

  • 编辑:此处不允许的消息不再显示。 我正在使用Volley访问google books,api是IcecreamSandwich。即使包括对清单文件的权限,我仍然会得到关于权限的异常。我已经读了一些已回答的问题(这个,这个)。当光标指向时,表示此处不允许使用该标记。我该如何解决问题呢? logcat:

  • 我的代码只有在我删除限制函数时才有效,我做错了什么? 错误为: TypeError:批量。查找(…)。limit不是D:\nodeprojects\mysite\server上的函数。js:281:19 at对象。(D:\nodeprojects\mysite\server.js:285:3)位于模块_在对象处编译(module.js:570:32)。模块_扩展。。模块处的js(模块js:579:

  • 我最近实现了一个4X4井字游戏的代码,这是使用极大极小算法。然而,我的极大极小函数无限次地递归调用自己。 初始板 (4X4) 井字 - 轮到电脑的代码- 在上面的代码中是船上的空位置,返回“X”(如果玩家X获胜),返回“O”(如果玩家O获胜) checkGameOver函数-

  • 我试图从邮递员这里发送json正文,我有简单的php代码获取json正文 当我从邮递员那里发送json尸体时,它给出了这些东西 注意:未定义的偏移量:第7行D:\Xampp\htdocs\Ass\index.php中的0 数组 那么如何从php文件中获取json值呢?