エンドポイントに移動しようとすると、次のエラーが発生します
タイプ定義エラー:[単純タイプ、クラス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>>>
を返しています
あなたは無視してプロパティの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
あなたの問題が解決されることを望みます。ありがとう。
Springリポジトリでチュートリアルをしているときにこのエラーに遭遇しました。私のエンティティのサービスクラスを構築する段階でエラーが発生したことがわかりました。
ServiceImplクラスには、おそらく次のようなものがあります。
@Override
public YourEntityClass findYourEntityClassById(Long id) {
return YourEntityClassRepositorie.getOne(id);
}
これを次のように変更します。
@Override
public YourEntityClass findYourEntityClassById(Long id) {
return YourEntityClassRepositorie.findById(id).get();
}
これは、getOne()が参照を返すためです。
私もこの問題に直面しました。 @Szelekの答えは私を助けました。しかし、私は別の方法でそれをしました。 getOne()メソッドを次のように変更しました。
repository.findById(id).orElse(null)
ええと、jvmの1つのインスタンスから、エンティティをシリアル化する必要のある別のインスタンスにエンティティを送信するためにトレーリングしていますか?これが当てはまる場合、エラーはエンティティを何らかの方法でフェッチし、Hibernateがシリアル化可能ではないクラスを使用しているためであると考える場合、エンティティをpojoに変換する必要があります(つまり、シリアル化可能なネイティブ型またはオブジェクトを使用します)。
FetchTypeをlazyからeagerに変更すると、うまくいきました。