当我尝试导航到端点时,出现以下错误
我检查了所有模型,所有属性都有getter和setter。所以有什么问题 ?
我可以通过添加spring.jackson.serialization.fail-on-empty-beans=false
来解决此问题,但我认为这只是隐藏异常的一种解决方法。
编辑Product
模型:
@Entity
public class Product {
private int id;
private String name;
private String photo;
private double price;
private int quantity;
private Double rating;
private Provider provider;
private String description;
private List<Category> categories = new ArrayList<>();
private List<Photo> photos = new ArrayList<>();
// Getters & Setters
}
PagedResponse
类:public class PagedResponse<T> {
private List<T> content;
private int page;
private int size;
private long totalElements;
private int totalPages;
private boolean last;
// Getters & Setters
}
RestResponse
类别:public class RestResponse<T> {
private String status;
private int code;
private String message;
private T result;
// Getters & Setters
}
在我的 Controller 中,我要返回
ResponseEntity<RestResponse<PagedResponse<Product>>>
最佳答案
我在使用Spring存储库进行教程时遇到了这个错误。原来,该错误是在为我的实体构建服务类的阶段犯的。
在您的serviceImpl类中,您可能有类似以下内容:
@Override
public YourEntityClass findYourEntityClassById(Long id) {
return YourEntityClassRepositorie.getOne(id);
}
更改为: @Override
public YourEntityClass findYourEntityClassById(Long id) {
return YourEntityClassRepositorie.findById(id).get();
}
基本上,getOne是延迟加载操作。因此,您仅获得对该实体的引用(代理)。这意味着实际上没有数据库访问权限。只有在调用它的属性时,它才会查询数据库。当您调用findByID时,它会“立即”执行调用,因此您已完全填充了实际实体。看看这个:Link to the difference between getOne & findByID