Récupérer la réponse d'une API en JSON
Kilkenny95
Messages postés
151
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour à tous,
Je dois développer une application qui extrait des donnée d'une autre application (TeamWork) via une de leur API. Je voudrai récupérer la réponse de l'API (qui est en JSON), et la traité dans mon application java, en filtrant pour récupérer seulement les infos qui m'intéresse. Pour cela j'hésite entre 2 solutions : soit utiliser Regex (API java) soit ETL. Je ne sais pas trop qu'elle est leur différence, et comment je dois m'en servir. Des idées ?
Merci
Je dois développer une application qui extrait des donnée d'une autre application (TeamWork) via une de leur API. Je voudrai récupérer la réponse de l'API (qui est en JSON), et la traité dans mon application java, en filtrant pour récupérer seulement les infos qui m'intéresse. Pour cela j'hésite entre 2 solutions : soit utiliser Regex (API java) soit ETL. Je ne sais pas trop qu'elle est leur différence, et comment je dois m'en servir. Des idées ?
Merci
A voir également:
- Récupérer données json java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Recuperer message whatsapp supprimé - Guide
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
4 réponses
Bonjour,
Ça n'a aucun intérêt de repartir d'aussi bas niveau qu'une regex.
Tu devrais directement utiliser les standards de Java EE.
Par exemple : https://cxf.apache.org/docs/jax-rs-client-api.html
Ça n'a aucun intérêt de repartir d'aussi bas niveau qu'une regex.
Tu devrais directement utiliser les standards de Java EE.
Par exemple : https://cxf.apache.org/docs/jax-rs-client-api.html
Kilkenny95
Messages postés
151
Date d'inscription
Statut
Membre
Dernière intervention
Bonjour, merci de ta réponse, mais je ne m'y connais pas trop, et ce que je trouve sur internet me semble confus... Peux tu m'expliquer rapidement ce que c'est ?
Salut Kilkenny95,
Je ne peux pas répondre pour t'éclairer sur la suggestion de KX, car je ne fais du Java que très occasionnellement.
mais... dans ton cas, est-ce qu'une simple bibliothèque permettant de parser le JSON que tu récupères ne serait pas suffisante ?
Il en existe de nombreuses : https://github.com/fabienrenaud/java-json-benchmark
Celle-ci https://github.com/stleary/JSON-java par exemple (qui n'est pas la meilleure ni la plus optimisée selon le comparatif ci-dessus) est assez simple d'utilisation pour des besoins simples : http://theoryapp.com/parse-json-in-java/
Exemple tiré de ce lien :
Tu as un topic SO sur la question : https://stackoverflow.com/questions/2591098/how-to-parse-json-in-java
Dal
Je ne peux pas répondre pour t'éclairer sur la suggestion de KX, car je ne fais du Java que très occasionnellement.
mais... dans ton cas, est-ce qu'une simple bibliothèque permettant de parser le JSON que tu récupères ne serait pas suffisante ?
Il en existe de nombreuses : https://github.com/fabienrenaud/java-json-benchmark
Celle-ci https://github.com/stleary/JSON-java par exemple (qui n'est pas la meilleure ni la plus optimisée selon le comparatif ci-dessus) est assez simple d'utilisation pour des besoins simples : http://theoryapp.com/parse-json-in-java/
Exemple tiré de ce lien :
String str = "{ \"name\": \"Alice\", \"age\": 20 }"; JSONObject obj = new JSONObject(str); String n = obj.getString("name"); int a = obj.getInt("age"); System.out.println(n + " " + a); // prints "Alice 20"
Tu as un topic SO sur la question : https://stackoverflow.com/questions/2591098/how-to-parse-json-in-java
Dal
Bonjour,
Voici un exemple de service REST https://jsonplaceholder.typicode.com/users qui liste des utilisateurs.
Avec CXF pour la partie JAX-RS et Jackson pour la partie JSON, je peux écrire ce code :
Remarque : il faut bien sûr ajouter les dépendances sur CXF et Jackson, par exemple avec Maven :
Voici un exemple de service REST https://jsonplaceholder.typicode.com/users qui liste des utilisateurs.
Avec CXF pour la partie JAX-RS et Jackson pour la partie JSON, je peux écrire ce code :
import java.util.List; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.Response; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; @JsonIgnoreProperties(ignoreUnknown=true) class User { @JsonProperty("name") public String name; @JsonProperty("address") public Address address; } @JsonIgnoreProperties(ignoreUnknown = true) class Address { @JsonProperty("city") public String city; } public class Application { public static void main(String[] args) { Response response = ClientBuilder.newClient().register(JacksonJsonProvider.class) .target("https://jsonplaceholder.typicode.com/").path("users") .request().get(); List<User> users = response.readEntity(new GenericType<List<User>>() {}); for (User user : users) { System.out.println(user.name + " : " + user.address.city); } } }
Remarque : il faut bien sûr ajouter les dépendances sur CXF et Jackson, par exemple avec Maven :
<dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-client</artifactId> <version>3.0.15</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.10.0</version> </dependency> </dependencies>
Une dépendance, c'est un morceau de code fourni par quelqu'un d'autre, il faut ajouter les jars correspondants sinon tu ne pourra pas compiler ou exécuter ton code.
Les imports javax.ws.rs.* dépendent de CXF, et les imports com.fasterxml.jackson de Jackson.
Si tu arrives à faire fonctionner mon exemple, ce sera déjà un bon début...
Quant à jsonschema2pojo, c'est un outil parmi d'autres sur internet, qui permet de générer automatiquement du code à partir d'un extrait de JSON ou d'un contrat YAML (l'idéal).
Voici comment j'aurais pu le configurer pour mon exemple, mais tu pourrais très bien coder tes POJO à la main.

Les imports javax.ws.rs.* dépendent de CXF, et les imports com.fasterxml.jackson de Jackson.
Si tu arrives à faire fonctionner mon exemple, ce sera déjà un bon début...
Quant à jsonschema2pojo, c'est un outil parmi d'autres sur internet, qui permet de générer automatiquement du code à partir d'un extrait de JSON ou d'un contrat YAML (l'idéal).
Voici comment j'aurais pu le configurer pour mon exemple, mais tu pourrais très bien coder tes POJO à la main.

Merci beaucoup, je vais tester ça.
J'ai une autre question où tu pourrais peut-être m'aider : j'ai surement besoin d'une base de données pour stocker mes donnée recupérer par mon appli web, puis-utiliser une base Access ? ai-je besoin d'un autre outils pour faire communiquer cette base à mon appli (ormis un JDBC)
Merci à toi
J'ai une autre question où tu pourrais peut-être m'aider : j'ai surement besoin d'une base de données pour stocker mes donnée recupérer par mon appli web, puis-utiliser une base Access ? ai-je besoin d'un autre outils pour faire communiquer cette base à mon appli (ormis un JDBC)
Merci à toi
Le plus simple serait d'utiliser Spring Boot, ce serait "juste un jar" qu'il faudrait démarrer via une commande java sur ton serveur, donc sans installer Tomcat.
Une application Spring Boot contient son propre serveur et démarre ton service directement.
Par contre il faudrait quand même installer une base de données à part, à moins que tes besoins en données soient limités, auquel cas tu pourrais utiliser une base de données embarquée (Derby par exemple), c'est à dire que quand tu lances le jar, il démarrer la base de donnée et le serveur en même temps.
Tout en un, c'est pratique (mais ça a aussi ces limites)
Une application Spring Boot contient son propre serveur et démarre ton service directement.
Par contre il faudrait quand même installer une base de données à part, à moins que tes besoins en données soient limités, auquel cas tu pourrais utiliser une base de données embarquée (Derby par exemple), c'est à dire que quand tu lances le jar, il démarrer la base de donnée et le serveur en même temps.
Tout en un, c'est pratique (mais ça a aussi ces limites)