web-dev-qa-db-fra.com

Aucun sérialiseur trouvé pour la classe org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor

Lorsque j'essaie de naviguer vers un point de terminaison, j'obtiens l'erreur suivante

Erreur de définition de type: [type simple, classe org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; l'exception imbriquée est com.fasterxml.jackson.databind.exc.InvalidDefinitionException: aucun sérialiseur trouvé pour la classe org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor et aucune propriété découverte pour créer BeanSerializer (pour éviter toute exception, désactivez SerializationFeature.FAIL_ON_EMPTY_BEANS)

J'ai vérifié tous mes modèles et tous les attributs ont des getters et setters. Donc quel est le problème ?

Je peux résoudre ce problème en ajoutant spring.jackson.serialization.fail-on-empty-beans=false mais je pense que c'est juste une solution pour cacher l'exception.

Modifier

Product modèle:

@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 classe:

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 Classe:

public class RestResponse<T> {
    private String status;
    private int code;
    private String message;
    private T result;

    // Getters & Setters
}

Dans mon contrôleur, je reviens ResponseEntity<RestResponse<PagedResponse<Product>>>

18
Ayoub k

Vous pouvez ignorer pour produire la sortie JSON d'une propriété en

@JsonIgnore 

Ou Si vous avez des propriétés chargées paresseuses ayant une relation. Vous pouvez utiliser cette annotation en haut de la propriété.

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

Exemple:

@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
}

Si cette erreur persiste, veuillez ajouter cette ligne de code dans votre fichier application.properties

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

J'espère que votre problème sera résolu. Merci.

16
Subarata Talukder

J'ai rencontré cette erreur lors d'un didacticiel avec le référentiel Spring. Il s'est avéré que l'erreur a été commise au stade de la création de la classe de service pour mon entité.

Dans votre classe serviceImpl, vous avez probablement quelque chose comme:

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

Changez ceci en:

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

C'est parce que getOne (), renvoie une référence.

9
Szelek

J'ai également fait face à ce problème. @ La réponse de Szelek m'a aidé. Mais je l'ai fait d'une autre manière. Modification de la méthode getOne () en:

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

Hmm, essayez-vous d'envoyer des entités d'une instance du jvm à une autre qui doivent les sérialiser? si tel est le cas, je pense que l'erreur est due au fait que vous avez récupéré les entités et que l'hibernation utilise ses classes non sérialisables, vous devez convertir les entités en pojo (je veux dire utiliser des types natifs ou des objets sérialisables).

0
Ivan Perales M.

Changer le FetchType de paresseux à impatient a fait l'affaire pour moi.

0
Chris Neve