J'ai un problème avec @GetMapping
dans Spring boot .
Il s'agit de ma fonction @GetMapping
qui ne sérialise pas mon id
sur ce modèle en récupérant toutes les données de la base de données:
//User.java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "username") private String username; @Temporal(TemporalType.TIMESTAMP) @Column(name = "joined_date") @CreatedDate private Date joinedDate; @Column(name = "password") private String password; @Column(name = "bio") private String bio; @Column(name = "email") private String email; }
J'ai essayé de nombreuses façons mais je ne peux pas du tout résoudre. Même cette question: Spring boot @ResponseBody ne sérialise pas l'ID d'entité
Voici l'image ci-dessous:
3 Réponses :
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; One solution is to use Integer wrapper class instead of the int. int default value is 0 and Integer's is null.
laissez-moi vérifier plus précisément
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStanda rdImpl
Quelle stratégie physique vous utilisez ???
Je n'utilise pas de physical-strategy
. Ce que j'ai fait, il suffit de changer le type de données de l'identifiant comme vous me l'avez dit. Je pense que vous avez exécuté le code ou débogué le code.
Oui, j'avais exécuté le code et fonctionnait bien pour moi. Avez-vous un référentiel git pour votre projet afin que je puisse le reproduire et vous aider d'une meilleure manière?
Et pouvez-vous s'il vous plaît partager votre réponse JSON?
> Avez-vous un référentiel git pour votre projet afin que je puisse le reproduire et vous aider d'une meilleure manière?
Non. Parce que mon projet est privé. Laissez-moi simplement travailler sur ce projet en privé
Vous devez utiliser @PathVariable
dans votre contrôleur. Vous pouvez essayer ceci:
Entité:
@GetMapping("/users/{id}") public ResponseEntity<User> getUserFromId(@PathVariable int id) { System.out.println(id); // should display the id // ... }
Contrôleur:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id;
Ouais je mets ça. Assurez-vous de vérifier le commentaire en haut du sujet
Le problème est que lorsque j'exécute le code et que j'obtiens des données d'URL (JSON), ils n'ont pas de Id
mais ma base de données en a. J'assure que j'ajoute le @PathVariable
avant d'exécuter le code
Je l'ai fait! Parce que j'ai oublié de mettre le getter / setter
pour le modèle. Et il y a plus de potentiels ici, je veux dire:
private int id
doit être remplacé par private Integer id
comme @Muhammad Vaqas
me l'a dit Et il y a la forme complète du modèle:
package com.harrycoder.weebjournal.user; import java.util.Date; import javax.persistence.*; import org.springframework.data.annotation.CreatedDate; import com.fasterxml.jackson.annotation.*; @Entity @Table(name = "users") @JsonIgnoreProperties(value = {"createdAt", "updatedAt"}, allowGetters = true) public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "username") private String username; @Temporal(TemporalType.TIMESTAMP) @Column(name = "joined_date") @CreatedDate private Date joinedDate; @Column(name = "password") private String password; @Column(name = "bio") private String bio; @Column(name = "email") private String email; public Integer getId() { return id; } public String getUsername() { return username; } public String getPassword() { return password; } public String getBio() { return bio; } public String getEmail() { return email; } public Date getJoinedDate() { return joinedDate; } }
Veuillez ajouter votre contrôleur.
La voici: hastebin.com/nucajamavo.java
Veuillez l'ajouter à votre question au lieu d'un lien dans les commentaires. Est-ce votre entité à part entière? Cela semble égarer les getters / setters (et avez-vous ceux pour l'ID?).
Ahh merci je le résous (il manque le getter d'identité)