1
votes

Comment puis-je convertir une chaîne pour l'implémenter dans des champs de base de données - Java / Spring / Postgres?

D'accord. J'ai utilisé response = restTemplate.exchange (url, HttpMethod.POST, request, String.class) pour envoyer une requête au serveur de ressources. Sous cela, j'ai utilisé System.out.println ("Response ------" + response.getBody ()); . Avec cela exécuté, je reçois une chaîne qui est en même temps une sorte d'objet JSON. Pouvez-vous m'expliquer comment puis-je le convertir en une sorte d'entité afin que je puisse le stocker dans ma base de données? Merci d'avance!

Cette chaîne que je reçois est comme ceci: {"access_token": "example ...", "expires_in": 28800, "refresh_token": "example ...", "scope": "example ...", "token_type": "Bearer", "user_id": "example ..."}


4 commentaires

Vous devrez nous montrer à quoi ressemble ce JSON et également nous indiquer la structure de base de données souhaitée.


{"access_token": "example ...", "expires_in": 28800, "refresh_tok‌ fr": "example ...", "sc‌ ope": "example ...", "t‌ oken_type": "Bearer", ‌ "user_id": "example..‌."} De plus, la base de données stocke ces champs séparés.


S'il s'agit d'un objet JSON à un seul niveau (peu profond), je pense que Spring peut déjà avoir la capacité de le mapper à un objet. Parcourez Stack Overflow et vous pourrez facilement changer quelque chose.


ajoutez cela dans le post, pas dans les commentaires @AleksandarLucic


3 Réponses :


0
votes

Essayez d'utiliser Gson:

Gson gson = new Gson();
    QuestionAnswerDTO questionAnswerDTOs = gson.fromJson(json, new TypeToken<QuestionAnswerDTO>() {
        }.getType());

Ici, QuestionAnserDTO contient le même champ que celui de la chaîne JSON.


0 commentaires

0
votes

Vous devez créer l'entité souhaitée avec jaxb, comme:

response = restTemplate.exchange(url, HttpMethod.POST,request, Entity.class);

Et puis vous pouvez faire des choses simples comme:

@XmlRootElement
public final class Entity {

           private Integer id;

           private String name;

           public final Integer getId() {
              return this.id;
           }

           public final void setId(Integer id) {
              this.id = id;
           }

           public final String getName() {
              return this.name;
           }

           public final void setName( String name) {
              this.name = name;
           }
    }


0 commentaires

0
votes

Vous pouvez utiliser ObjectMapper de Jackson (com.fasterxml.jackson.databind.ObjectMapper)

ObjectMapper objectMapper = new ObjectMapper();
YourClass obj = objectMapper.readValue(yourJsonString, YourClass.class);


3 commentaires

Ok, j'ai essayé ceci mais si j'essaye après cela d'imprimer comme System.out.println (obj.getAccessToken ()); , im obtenant null ...


@AleksandarLucic Quel est le nom d'attribut du jeton d'accès dans YourClass? Parce que vous l'avez en tant que "access_token" dans la chaîne, vos noms d'attributs dans YourClass doivent correspondre à ces clés dans cette chaîne json. C'est la seule raison pour laquelle je peux voir pourquoi vous obtenez null, j'ai essayé d'utiliser "access_token" comme champ de classe et cela a fonctionné.


Ouais mec, le problème concernait le nom des champs de classe, ils étaient différents de ceux de la chaîne JSON. Ty!