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>>>
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.
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.
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)
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).
Changer le FetchType de paresseux à impatient a fait l'affaire pour moi.