java - Spring boot userRepository.findAll() 显示太多次并导致 stackoverflow 错误

标签 java json spring-boot jackson

我有这段代码,但浏览器上的输出不是我想要的

@GetMapping(path = "/all")
public @ResponseBody List<User> getAllUsers() {
    return userRepository.findAll();
}

输出:

[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users":[{"id":4,"firstName":"busayo","lastName":"amowe","email":"amoweolubusayo@gmail.com","password":"$2a$10$09kGDhlEp.Xmj0ocDjGLTO.03z.kGQKm2ZHcsNetDpH0r6m1rkVIu","roles":[{"id":1,"name":"ROLE_ADMIN","users"

不是应该打印一次吗?它显示 StackOverFlow 错误,而我的 getJson 函数无法显示它。我能做什么?

最佳答案

user 之间存在循环依赖关系和user role实体。

为了将您的回复返回给客户,您的 List<User>必须序列化。你必须告诉 Jackson 如何处理循环,否则它将因堆栈溢出异常而失败。

public class User {

    @JsonBackReference
    public List<Role> roles;

    // ...       

}

public class Role {

    @JsonManagedReference
    public List<User> users;

    // ...       

}

有关双向关系的 Jackson 教程,请参阅 https://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion

关于java - Spring boot userRepository.findAll() 显示太多次并导致 stackoverflow 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52821467/

相关文章:

javascript - 接受 D3 布局树中的通用嵌套对象

jquery - 根据边框宽度设置背景颜色

android - 使用 Volley 在正文中发布表单数据参数

java - 调度程序未在 Spring Boot 中运行

java - Spring 自定义范围生命周期 Bean 终止

java - 空大括号/大括号在 Java 中是什么意思?

java - IntelliJ IDEA 远程 JSP 调试?

java - 请放心 : handling multiple results in response?

java - 如何用哈希表处理枚举

使用 Spring Boot : Allowing unauthenticated user access on specific endpoints when using a filter 的 Spring Security