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 ..."}
3 Réponses :
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.
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;
}
}
Vous pouvez utiliser ObjectMapper de Jackson (com.fasterxml.jackson.databind.ObjectMapper)
ObjectMapper objectMapper = new ObjectMapper(); YourClass obj = objectMapper.readValue(yourJsonString, YourClass.class);
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!
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