【问题标题】:spring boot rest api : wrong with showing informationspring boot rest api:显示信息错误
【发布时间】:2018-07-15 18:04:01
【问题描述】:

我已经使用 spring boot 和 Jersy 编写了一个 rest API,我遇到了请求问题。 当我发出一个获取请求时,它会向我显示超过一百次的结果。 这是我的控制器类

@RestController
public class UserController {
  @RequestMapping("/users")
public List<User> getAllUsers(){
    return new UserService().getAllUsers();
}
@RequestMapping("/users/{id}")
public User getUser(@RequestParam int id) {
    return new UserService().getUser(id);
}
}

这是我的服务类

@Service
public class UserService {
SessionFactory factory = new Configuration()
                             .configure("hibernate.cfg.xml")
                             .addAnnotatedClass(User.class)
                             .addAnnotatedClass(UserProfile.class)
                             .buildSessionFactory();

public UserService() {

}

public List<User> getAllUsers(){
        Session session = factory.getCurrentSession();
        session.beginTransaction();
        List<User> users = session.createQuery("from User").list();
        session.getTransaction().commit();
        session.close();
        return users;
}


public User getUser(int id) {
    Session session = factory.getCurrentSession();
    session.beginTransaction();
    User user = session.get(User.class, id);
    session.getTransaction().commit();
    session.close();
    return user;
}


}

这是显示的结果

[{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":{"id":7,"name":"mohammad","email":"mohammadpakivand@gmail.com","userProfile":{"id":1,"lastName":"pakivand","number":"09362762537","user":

这个 User 类与 UserProfile 类是一对一的关系

【问题讨论】:

    标签: java hibernate spring-boot jersey


    【解决方案1】:

    首先。您的 UserService 被注释为服务。这意味着在引导 Spring 期间会创建一个实例,并将此 UserService 实例放入 SpringContext。您的 Restcontoller 也是 SpringContext 的一部分。然后你可以将你的服务注入到你的控制器中。

    @RestController
    public class UserController {
    
    // Here is where the injection takes place
    @Autowired
    private UserService userService;
    
      @RequestMapping("/users")
    public List<User> getAllUsers(){
        return userService.getAllUsers();
    }
    @RequestMapping("/users/{id}")
    public User getUser(@RequestParam int id) {
        return userService.getUser(id);
    }
    }
    

    第二。 为什么在只读操作期间使用和提交事务。

    第三。你的 User 类的代码是什么?

    【讨论】:

    • 我承诺是因为我认为展示结果的声誉是因为会话是开放的。并且用户类低于@Entity @Table(name="user") public class User { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") private int id; @Column(name="name") private String name; @Column(name="email") private String email; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="user_profile_id") private UserProfile userProfile; public User() { } ... //getter 和 setter @Ronald van der List
    • 我认为您的 UserProfile 类引用了您的 User 类。这就是为什么你的 json 中的 userProfile 属性显示一个用户属性,它有一个 userProfile 属性等。这就是你的 json 与同一个用户嵌套的原因。 baeldung 上有一篇很棒的帖子解释了这一点:www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion
    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 2020-04-12
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    相关资源
    最近更新 更多