Partage
  • Partager sur Facebook
  • Partager sur Twitter

Consommer API Rest de SharePoint

Récupérer les dossiers dans un SharePoint avec Java - Spring boot

Sujet résolu
    9 août 2022 à 18:27:26

    Bonjour à tous !

    Je veux récupérer la liste de tous les dossiers sur SharePoint pour les afficher sur mon application. Je me suis authentifié au sharepoint.

    try {
    
                // AccessToken url
                String wsURL = "https://accounts.accesscontrol.windows.net/" + shp_tenantId + "/tokens/OAuth/2";
    
                URL url = new URL(wsURL);
                URLConnection connection = url.openConnection();
                HttpURLConnection httpConn = (HttpURLConnection) connection;
    
                // Set header
                httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                httpConn.setRequestProperty("Content-Length", "<calculated when request is sent>");
                httpConn.setRequestProperty("Host", "<calculated when request is sent>");
                httpConn.setDoOutput(true);
                httpConn.setDoInput(true);
                httpConn.setRequestMethod("POST");
    
                // Prepare RequestData
    
                String jsonParam = "grant_type=client_credentials"
                        + "&client_id=" + shp_clientId + "@" + shp_tenantId
                        + "&client_secret=" + shp_clientSecret
                        + "&resource=00000003-0000-0ff1-ce00-000000000000/"+domaine_prefix+".sharepoint.com@" + shp_tenantId;
                //Here, <org_Shp_Host> is "Origanisations's Sharepoint Host"
    
                // Send Request
                DataOutputStream wr = new DataOutputStream(httpConn.getOutputStream());
                wr.writeBytes(jsonParam);
                wr.flush();
                wr.close();
    
                // Read the response.
                InputStreamReader isr = null;
                if (httpConn.getResponseCode() == 200) {
                    isr = new InputStreamReader(httpConn.getInputStream());
                } else {
                    isr = new InputStreamReader(httpConn.getErrorStream());
                }
    
                BufferedReader in = new BufferedReader(isr);
                String responseString = "";
                String outputString = "";
                // Write response to a String.
                while ((responseString = in.readLine()) != null) {
                    outputString = outputString + responseString;
                    System.out.println(outputString);
                }
    
                // Extracting accessToken from string, here response (outputString)is a Json format string
                if (outputString.indexOf("access_token\":\"") > -1) {
                    //if (outputString.indexOf("access_token\":\"") > -1) {
                    int i1 = outputString.indexOf("access_token\":\"");
                    String str1 = outputString.substring(i1 + 15);
                    int i2 = str1.indexOf("\"}");
                    accessToken = str1.substring(0, i2);
                }
            } catch (Exception e) {
                accessToken = "Error: " + e.getMessage();
            }

    J'ai aussi pu récupérer un fichier avec le chemin absolu. 

    Voici le résultat de l'API sur postman

    Code

    try {
                //Frame SharePoint siteURL
                String siteURL = "https://"+domaine_prefix+".sharepoint.com/";
    
                //Frame SharePoint URL to retrieve all the files in a folder
                String wsUrl = siteURL + wsUrl2;
    
                //Create HttpURLConnection
                URL url = new URL(wsUrl);
                URLConnection connection = url.openConnection();
                HttpURLConnection httpConn = (HttpURLConnection) connection;
    
                //Set Header
                httpConn.setRequestMethod("GET");
                httpConn.setRequestProperty("Authorization", "Bearer " + accessToken);
                httpConn.setRequestProperty("Accept", "application/json;odata=verbose"); //To get response in JSON
                httpConn.setRequestProperty("Content-Type", "application/json;odata=verbose"); //To get response in JSON
                //httpConn.setRequestProperty("accept", "application/atom+xml");         //To get response in XML
    
                //Read the response
                String httpResponseStr = "";
                InputStreamReader isr = null;
                if (httpConn.getResponseCode() == 200) {
                    isr = new InputStreamReader(httpConn.getInputStream());
                } else {
                    isr = new InputStreamReader(httpConn.getErrorStream());
                }
                BufferedReader in = new BufferedReader(isr);
                String strLine = "";
                while ((strLine = in.readLine()) != null) {
                    httpResponseStr = httpResponseStr + strLine;
                }
                System.out.println(httpResponseStr);	
    
                JSONObject obj = new JSONObject(httpResponseStr);
                String pageName = obj.getJSONObject("d").getString("Name");
    
            } catch (Exception e) {
                System.out.println("Error while reading file: " + e.getMessage());
            }



    Ensuite je veux récupérer tous les dossiers et boucler par la suite. Et c'est là, le souci. Au niveau du "result", nous avons un tableau et non un string

    Json sur postman

    Code 

    try {
                //Frame SharePoint siteURL
                String siteURL = "https://"+domaine_prefix+".sharepoint.com/";
    
                //Frame SharePoint URL to retrieve all the files in a folder
                String wsUrl = siteURL + wsUrl2;
    
                //Create HttpURLConnection
                URL url = new URL(wsUrl);
                URLConnection connection = url.openConnection();
                HttpURLConnection httpConn = (HttpURLConnection) connection;
    
                //Set Header
                httpConn.setRequestMethod("GET");
                httpConn.setRequestProperty("Authorization", "Bearer " + accessToken);
                httpConn.setRequestProperty("Accept", "application/json;odata=verbose"); //To get response in JSON
                httpConn.setRequestProperty("Content-Type", "application/json;odata=verbose"); //To get response in JSON
                //httpConn.setRequestProperty("accept", "application/atom+xml");         //To get response in XML
    
                //Read the response
                String httpResponseStr = "";
                InputStreamReader isr = null;
                if (httpConn.getResponseCode() == 200) {
                    isr = new InputStreamReader(httpConn.getInputStream());
                } else {
                    isr = new InputStreamReader(httpConn.getErrorStream());
                }
                BufferedReader in = new BufferedReader(isr);
                String strLine = "";
                while ((strLine = in.readLine()) != null) {
                    httpResponseStr = httpResponseStr + strLine;
                }
    
                JSONObject obj = new JSONObject(httpResponseStr);
                String pageName = obj.getJSONObject("d").getString("result");
    
                JSONArray arr = obj.getJSONArray(pageName);
                for (int i = 0; i < arr.length(); i++) {
                    String post_id = arr.getJSONObject(i).getString("results");
                    System.out.println(post_id);
                }
    
    
            } catch (Exception e) {
                System.out.println("Error while reading file: " + e.getMessage());
            }

    Erreur

    Error while reading file: JSONObject["result"] not found.

    Je trouve l'erreur logique, mais je ne sais pas comment resoudre



    -
    Edité par KOFFI KRAH LANDRY 9 août 2022 à 18:41:15

    • Partager sur Facebook
    • Partager sur Twitter

    Le génie c'est 99% de transpiration et 1 % de chance.

      12 août 2022 à 11:45:34

      bah déjà, le nom est results avec un s et pas result au singulier, donc l'erreur est juste en ligne 35.

      Après, comme ce sera un tableau, bah il faut le parcourir comme tel, avec un indice pour récupérer/accéder aux éléments de ce tableau

      • Partager sur Facebook
      • Partager sur Twitter

      Consommer API Rest de SharePoint

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown