web-dev-qa-db-ja.com

クラスorg.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptorのシリアライザーが見つかりません

エンドポイントに移動しようとすると、次のエラーが発生します

タイプ定義エラー:[単純タイプ、クラスorg.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor];ネストされた例外はcom.fasterxml.jackson.databind.exc.InvalidDefinitionExceptionです:クラスorg.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptorのシリアライザーが見つかりませんでした。また、BeanSerializerを作成するためのプロパティが見つかりませんでした(例外を回避するには、SerializationFeature.FAIL_ON_EMPTY_BEANSを無効にします)

すべてのモデルをチェックしましたが、すべての属性にゲッターとセッターがあります。だから問題は何ですか ?

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
}

私のコントローラーではResponseEntity<RestResponse<PagedResponse<Product>>>を返しています

18
Ayoub k

あなたは無視してプロパティの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

あなたの問題が解決されることを望みます。ありがとう。

16

Springリポジトリでチュートリアルをしているときにこのエラーに遭遇しました。私のエンティティのサービスクラスを構築する段階でエラーが発生したことがわかりました。

ServiceImplクラスには、おそらく次のようなものがあります。

    @Override
    public YourEntityClass findYourEntityClassById(Long id) {
      return YourEntityClassRepositorie.getOne(id);
    }

これを次のように変更します。

    @Override
    public YourEntityClass findYourEntityClassById(Long id) {
      return YourEntityClassRepositorie.findById(id).get();
    }

これは、getOne()が参照を返すためです。

9
Szelek

私もこの問題に直面しました。 @Szelekの答えは私を助けました。しかし、私は別の方法でそれをしました。 getOne()メソッドを次のように変更しました。

repository.findById(id).orElse(null)
1
SNabi

ええと、jvmの1つのインスタンスから、エンティティをシリアル化する必要のある別のインスタンスにエンティティを送信するためにトレーリングしていますか?これが当てはまる場合、エラーはエンティティを何らかの方法でフェッチし、Hibernateがシリアル化可能ではないクラスを使用しているためであると考える場合、エンティティをpojoに変換する必要があります(つまり、シリアル化可能なネイティブ型またはオブジェクトを使用します)。

0
Ivan Perales M.

FetchTypeをlazyからeagerに変更すると、うまくいきました。

0
Chris Neve