未找到类 org.hibernate.proxy.pojo.bytebuddy.ByteBuddy.ByteBuddyInterceptor 的序列化程序

当我尝试导航到端点时,我收到以下错误

Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)  

我检查了我所有的模型,所有属性都有 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
}

在我的控制器中,我返回ReactEntity<RestResponse<PagedResponse<Product>>>


答案 1

我在使用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在调用它时会“急切地”/立即进行调用,因此您完全填充了实际的实体。

看看这个:链接到getOne和findByID之间的区别


答案 2

您可以忽略以生成属性的 JSON 输出

@JsonIgnore 

或者,如果您有任何具有关系的延迟加载属性。可以在属性顶部使用此批注。

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) 

例:

@Entity
public class Product implements Serializable{
   private int id;
   private String name;
   private String photo;
   private double price;
   private int quantity;
   private Double rating;
   private Provider provider;
   private String description;

   @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
   private List<Category> categories = new ArrayList<>();

   @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
   private List<Photo> photos = new ArrayList<>();

   // Getters & Setters
}

如果仍然有此错误,请在 application.properties 文件中添加这行代码

spring.jackson.serialization.fail-on-empty-beans=false

我希望你的问题会得到解决。谢谢。


推荐