slam4:gui:rest

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
slam4:gui:rest [2015/03/15 19:53] – [3.1- GET] jcheronslam4:gui:rest [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1
Ligne 142: Ligne 142:
 ===== -- Http requests ===== ===== -- Http requests =====
  
 +Pour mettre en oeuvre les tests, vous devez disposer d'un serveur HTTP hébergeant un service Rest.
 ==== -- GET ==== ==== -- GET ====
  
-Créer une classe TestHttp :+Créer une classe TestHttp, instanciant un objet Gson qui nous servira pour les conversions JSON<=>Objet Java :
  
-<sxh java title:test/TestHttp.java>+<sxh java;title:test/TestHttp.java>
 public class TestHttp { public class TestHttp {
  private Gson gson;  private Gson gson;
Ligne 155: Ligne 156:
  .create();  .create();
  }  }
 +}
 +</sxh>
 +
 +
 +Implémmenter la méthode getHttp :
 +<sxh java;title:test/TestHttp.java>
 + ...
  public String getHTML(String urlToRead) throws ClientProtocolException, IOException {  public String getHTML(String urlToRead) throws ClientProtocolException, IOException {
  String result="";  String result="";
Ligne 167: Ligne 175:
  return result;  return result;
  }  }
-}+ ... 
 +</sxh> 
 + 
 +Ajouter la méthode **main** dans la classe pour tester le Get, n'oubliez pas de démarrer le serveur : 
 + 
 +<sxh java;title:test/TestHttp.java> 
 + ... 
 + public static void main(String args[]) { 
 + TestHttp test = new TestHttp(); 
 + 
 + try { 
 + String result = test.getHTML("http://127.0.0.1/[restServer]"); 
 + System.out.println(result); 
 + 
 + catch (IOException e) { 
 + e.printStackTrace(); 
 +
 +
 + ...
 </sxh> </sxh>
 ==== -- POST ==== ==== -- POST ====
  
 +Implémmenter la méthode restPostJSON :
 +<sxh java;title:test/TestHttp.java>
 + ...
 + public String restPostJSON(String urlToRead, Object o) throws ClientProtocolException, IOException {
 + String result = "";
 + CloseableHttpClient httpClient = HttpClients.createDefault();
 + try {
 + HttpPost postRequest = new HttpPost(urlToRead);
 + postRequest.setHeader("content-type", "application/json");
 + postRequest.setHeader("Accept", "application/json");
 + String jsonString = gson.toJson(o);
 + StringEntity params = new StringEntity(jsonString);
 + params.setContentType("application/json");
 + params.setContentEncoding("UTF-8");
 + postRequest.setEntity(params);
 + ResponseHandler<String> responseHandler = new BasicResponseHandler();
 + result = httpClient.execute(postRequest, responseHandler);
 + } finally {
 + httpClient.close();
 + }
 + return result;
 + }
 + ...
 +</sxh>
  
 +Modifier la méthode **main** de la classe pour tester le restPostJSON :
  
 +<sxh java;title:test/TestHttp.java;highlight:[9,10,11]>
 + ...
 + public static void main(String args[]) {
 + TestHttp test = new TestHttp();
 +
 + try {
 + ...
 + System.out.println(test.restPostJSON(
 + "http://127.0.0.1/[restServer]/mondes", new Monde("Nouveau")));
 +
 + } catch (IOException e) {
 + e.printStackTrace();
 + }
 + }
 + ...
 +</sxh>
 +
 +
 +
 +===== -- POST Classique =====
 +
 +Le post classique est légèrement plus complexe, puisqu'il nécessite :
 +  * La conversion en JsonObject de l'objet à poster
 +  * L'envoi dans l'en-tête HTTP des couples nomDeMembre/valeur de l'objet
 +  * La définition du content-type de la requête : **"application/x-www-form-urlencoded"**
 +
 +
 +Implémmenter la méthode postJSON :
 +<sxh java;title:test/TestHttp.java>
 + ...
 + public String postJSON(String urlToRead, Object o)
 + throws ClientProtocolException, IOException {
 + String result = "";
 + CloseableHttpClient httpClient = HttpClients.createDefault();
 + try {
 + HttpPost postRequest = new HttpPost(urlToRead);
 + postRequest.setHeader("content-type","application/x-www-form-urlencoded");
 + List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
 +
 + JsonElement elm = gson.toJsonTree(o);
 + JsonObject jsonObj = elm.getAsJsonObject();
 + for (Map.Entry<String, JsonElement> entry : jsonObj.entrySet()) {
 + nameValuePairs.add(new BasicNameValuePair(entry.getKey(), entry
 + .getValue().getAsString()));
 + }
 + postRequest.setEntity(new UrlEncodedFormEntity(nameValuePairs));
 + ResponseHandler<String> responseHandler = new BasicResponseHandler();
 + result = httpClient.execute(postRequest, responseHandler);
 + } finally {
 + httpClient.close();
 + ;
 + }
 + return result;
 + }
 + ...
 +</sxh>
 +
 +Modifier la méthode **main** de la classe pour tester le POST classique, il s'agit ici d'un exemple avec une classe User :
 +
 +<sxh java;title:test/TestHttp.java;highlight:[9,10,11]>
 + ...
 + public static void main(String args[]) {
 + TestHttp test = new TestHttp();
 +
 + try {
 + String result = test.getHTML("http://127.0.0.1/[restServer]");
 + System.out.println(result);
 +
 + System.out.println(test.postJSON(
 + "http://127.0.0.1/[restServer]/user/connect", new User(
 + "admin@local.fr", "0000")));
 +
 + } catch (IOException e) {
 + e.printStackTrace();
 + }
 + }
 + ...
 +</sxh>
 +
 +===== -- Session =====
 +
 +Pour conserver la session, on instancie un HttpContext, qui sera passé à toutes les requêtes.
 +
 +
 +<sxh java>
 +
 + private HttpContext httpContext;
 + private CloseableHttpClient httpClient;
 + private CookieStore cookieStore;
 +
 + protected void createCookieStore() {
 + httpClient = HttpClients.createDefault();
 + cookieStore = new BasicCookieStore();
 + httpContext = new BasicHttpContext();
 + httpContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);
 + }
 +
 + public TestHttp() {
 + gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
 + createCookieStore();
 + }
 +</sxh>
 +
 +Utilisation et passage du HttpContext :
 +<sxh java>
 + result = httpClient.execute(getRequest, responseHandler, httpContext);
 + ...
 + result = httpClient.execute(postRequest, responseHandler, httpContext);
 +
 +</sxh>
  • slam4/gui/rest.1426445584.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)