【问题标题】:I am trying to create a folder from Java rest API on sharepoint我正在尝试从共享点上的 Java REST API 创建一个文件夹
【发布时间】:2022-06-28 13:14:10
【问题描述】:

我正在尝试使用访问令牌创建一个文件夹 我获得了访问权限,但最终获得了响应代码 404。 我试图开发一个 JsonInputString 然后声明连接 我在 httpconn 中设置了值,然后尝试调用连接 我究竟做错了什么, 如果我对值进行硬编码,但当我动态获取它时,它会起作用。

这是我的代码

    String siteURL, String folder) throws IOException {
        String wsURL = siteURL + "/_api/web/folders";
        URL url = new URL(wsURL);
        URLConnection connection = url.openConnection();
        String[] arr = siteURL.split("com");
        String siteNameURL = arr[arr.length-1];
        String jsonInputString = "{'__metadata': { 'type': 'SP.Folder' }, 'ServerRelativeUrl': '/sites"+ siteNameURL +"/Shared%20Documents/"
                + folder + "'}";
        HttpURLConnection httpConn = (HttpURLConnection) connection;
        try {
            clientID = sharePointclientID;
            clientSecret = secretKey;

            // AccessToken url : app.properties

            accessTokenScr = getSharepointTokenScripting();
            // Set header
            httpConn.setRequestProperty("Content-Type", "application/json;odata=verbose");
            httpConn.setRequestProperty("Accept", "application/json;odata=verbose");
            httpConn.setRequestProperty("Authorization", "Bearer " + accessTokenScr);
            httpConn.setDoOutput(true);
            httpConn.setDoInput(true);
            httpConn.setRequestMethod("POST");
            httpConn.setRequestProperty("X-RequestDigest", "SHAREPOINT_FORM_DIGEST");
            httpConn.setRequestProperty("Content-Length", Integer.toString(jsonInputString.getBytes("utf-8").length));
            DataOutputStream wr = new DataOutputStream(httpConn.getOutputStream());

            byte[] input = jsonInputString.getBytes("utf-8");
            wr.write(input, 0, input.length);

            String responseStr = "";
            if (httpConn.getResponseCode() == 201) {
                responseStr = "Folder has been created successfully. ResponseCode: " + httpConn.getResponseCode();
            } else {
                responseStr += "Error while creating folder, ResponseCode: " + httpConn.getResponseCode() + " "
                        + httpConn.getResponseMessage();
            }
            LOG.info(responseStr);

【问题讨论】:

    标签: java spring sharepoint


    【解决方案1】:

    您需要发出 WebDAV MKCOL 命令,而 HttpURLConnection 不会这样做。如果您的 Web 服务器支持 WebDAV,您可以使用 Apache HTTP 客户端来执行此操作。通常 PUT 用于在给定位置而不是文件夹创建内容。

    您需要检查您的服务器支持哪些命令来创建文件夹(即过去 WebDAV 服务器会使用 MKCOL - Creating Folders (WebDAV) )。仅更改客户端代码不会启用此类功能。

    【讨论】:

    • 当我对相同的代码进行硬编码时,我的代码正在工作,一定有办法解决
    • 硬编码相同的代码是什么意思
    • 如果我对 ServerRelativeUrl、客户端 ID 和密钥进行硬编码,那么它可以工作,但是当我动态地进行编码时,则不会
    【解决方案2】:

    我做错的唯一一件事是没有在 JSON 中添加 /sites

    刚刚改变

    String jsonInputString = "{'__metadata': { 'type': 'SP.Folder' }, 'ServerRelativeUrl': '/sites"+ siteNameURL +"/Shared%20Documents/" + 文件夹 + "'}";

    String jsonInputString = "{'__metadata': { 'type': 'SP.Folder' }, 'ServerRelativeUrl': '"+ siteNameURL +"/Shared%20Documents/" + 文件夹 + "'}";

    成功了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多