使用 Java 通过 Rest API 在 Confluence 中创建页面

2023-12-28

有谁有关于如何使用 Confluence 的 RESTful API 在 Confluence 中创建页面/wiki 条目的示例吗?我正在尝试用 Java 编写一些可以做到这一点的东西。

先感谢您...


谢谢,我已经在线检查了文档,但找不到任何示例使用JAVA的在 Confluence REST API 中。这就是我在这里发帖的原因。

无论如何,我想我已经明白了:

    import org.apache.commons.io.IOUtils;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.ContentType;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;

    /**
     * Creates a Confluence wiki page via the RESTul API
     * using an HTTP Post command.
     */
    public class ConfluenceRestApi2CreateEntry {

        //private static final String BASE_URL = "http://localhost:1990/confluence";
        private static final String BASE_URL = "https://<context>.atlassian.net/wiki";
        private static final String USERNAME = "username";
        private static final String PASSWORD = "password";
        private static final String ENCODING = "utf-8";

        public static String createContentRestUrl()throws UnsupportedEncodingException
        {
            return String.format("%s/rest/api/content/?&os_authType=basic&os_username=%s&os_password=%s", BASE_URL, URLEncoder.encode(USERNAME, ENCODING), URLEncoder.encode(PASSWORD, ENCODING));

        }

        public static void main(final String[] args) throws Exception
        {
            String wikiPageTitle = "My Awesome Page";
            String wikiPage = "<h1>Things That Are Awesome</h1><ul><li>Birds</li><li>Mammals</li><li>Decapods</li></ul>";
            String wikiSpace = "JOUR";
            String labelToAdd = "awesome_stuff";
            int parentPageId = 9994250;


            JSONObject newPage = defineConfluencePage(wikiPageTitle,
                    wikiPage,
                    wikiSpace,
                    labelToAdd,
                    parentPageId);

            createConfluencePageViaPost(newPage);

        }

        public static void createConfluencePageViaPost(JSONObject newPage) throws Exception
        {
            HttpClient client = new DefaultHttpClient();

            // Send update request
            HttpEntity pageEntity = null;

            try
            {
                //2016-12-18 - StirlingCrow: Left off here.  Was finally able to get the post command to work
                //I can begin testing adding more data to the value stuff (see above)
                HttpPost postPageRequest = new HttpPost(createContentRestUrl());

                StringEntity entity = new StringEntity(newPage.toString(), ContentType.APPLICATION_JSON);
                postPageRequest.setEntity(entity);

                HttpResponse postPageResponse = client.execute(postPageRequest);
                pageEntity = postPageResponse.getEntity();

                System.out.println("Push Page Request returned " + postPageResponse.getStatusLine().toString());
                System.out.println("");
                System.out.println(IOUtils.toString(pageEntity.getContent()));
            }
            finally
            {
                EntityUtils.consume(pageEntity);
            }
        }

        public static JSONObject defineConfluencePage(String pageTitle,
                                                      String wikiEntryText,
                                                      String pageSpace,
                                                      String label,
                                                      int parentPageId) throws JSONException
        {
            //This would be the command in Python (similar to the example
            //in the Confluence example:
            //
            //curl -u <username>:<password> -X POST -H 'Content-Type: application/json' -d'{
            // "type":"page",
            // "title":"My Awesome Page",
            // "ancestors":[{"id":9994246}],
            // "space":{"key":"JOUR"},
            // "body":
            //        {"storage":
            //                   {"value":"<h1>Things That Are Awesome</h1><ul><li>Birds</li><li>Mammals</li><li>Decapods</li></ul>",
            //                    "representation":"storage"}
            //        },
            // "metadata":
            //             {"labels":[
            //                        {"prefix":"global",
            //                        "name":"journal"},
            //                        {"prefix":"global",
            //                        "name":"awesome_stuff"}
            //                       ]
            //             }
            // }'
            // http://localhost:8080/confluence/rest/api/content/ | python -mjson.tool

            JSONObject newPage = new JSONObject();

            // "type":"page",
            // "title":"My Awesome Page"
            newPage.put("type","page");
            newPage.put("title", pageTitle);

            // "ancestors":[{"id":9994246}],
            JSONObject parentPage = new JSONObject();
            parentPage.put("id",parentPageId);

            JSONArray parentPageArray = new JSONArray();
            parentPageArray.put(parentPage);

            newPage.put("ancestors", parentPageArray);

            // "space":{"key":"JOUR"},
            JSONObject spaceOb = new JSONObject();
            spaceOb.put("key",pageSpace);
            newPage.put("space", spaceOb);

            // "body":
            //        {"storage":
            //                   {"value":"<p><h1>Things That Are Awesome</h1><ul><li>Birds</li><li>Mammals</li><li>Decapods</li></ul></p>",
            //                    "representation":"storage"}
            //        },
            JSONObject jsonObjects = new JSONObject();

            jsonObjects.put("value", wikiEntryText);
            jsonObjects.put("representation","storage");

            JSONObject storageObject = new JSONObject();
            storageObject.put("storage", jsonObjects);

            newPage.put("body", storageObject);


            //LABELS
            // "metadata":
            //             {"labels":[
            //                        {"prefix":"global",
            //                        "name":"journal"},
            //                        {"prefix":"global",
            //                        "name":"awesome_stuff"}
            //                       ]
            //             }
            JSONObject prefixJsonObject1 = new JSONObject();
            prefixJsonObject1.put("prefix","global");
            prefixJsonObject1.put("name","journal");
            JSONObject prefixJsonObject2 = new JSONObject();
            prefixJsonObject2.put("prefix","global");
            prefixJsonObject2.put("name",label);

            JSONArray prefixArray = new JSONArray();
            prefixArray.put(prefixJsonObject1);
            prefixArray.put(prefixJsonObject2);

            JSONObject labelsObject = new JSONObject();
            labelsObject.put("labels", prefixArray);

            newPage.put("metadata",labelsObject);

            return newPage;
        }
    }

这是我在 GitHub 中创建的一个项目,其中还有一个使用 Java 简单提取 wiki 页面条目的示例:

  • https://github.com/stirlingcrow/Confluence-AccessRestApiWithJava https://github.com/stirlingcrow/Confluence-AccessRestApiWithJava
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 通过 Rest API 在 Confluence 中创建页面 的相关文章

随机推荐

  • 当“myType”在运行时动态生成时,鉴别器“myType”不明确

    我有一个应用程序 它在运行时动态创建新类型 创建该类型的对象并将它们插入到类型的 MongoDB 数据库集合中object 使用 shell 我可以看到对象已正确插入并且 tvalue 是动态创建的类的正确名称 我正在尝试使用以下方法从我的
  • KeyCloak 用户联合和动态角色

    我正在使用本指南http www keycloak org docs 3 2 server development topics user storage html http www keycloak org docs 3 2 server
  • 如何在 Python 中生成随机字符串(长度为 X,仅 a-z)? [复制]

    这个问题在这里已经有答案了 可能的重复 python 生成带有大写字母和数字的随机字符串 https stackoverflow com questions 2257441 python random string generation w
  • 使用 Firefox(最新 32 位)浏览器的量角器未加载

    因此 由于某种原因 当我运行 Protractor 时 Firefox 最新 32 只会打开一个空浏览器 并且不会导航到 baseURL 我编写的测试在 Chrome 上工作得很好 但在 Firefox 上却不行 这可能与conf文件的设置
  • 如何从 Android 的 Google 获取当前时间? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有 Google API 可以从时区获取当前时间 如果有 我该如何使用它 我想从特定时区获取当前在
  • Android 中同时播放多个视频文件

    我曾在 iPad 上对 iOS 提出过同样的问题 但现在我想看看在 Android 中是否可行 目前我收到的回复是 iOS 内没有 如果在 Android 中可行 请解释一下使用了什么 API 这是我引用的原始问题 iOS 上的原始帖子可在
  • 如何枚举 SQL 中返回的行?

    我想知道是否可以枚举返回的行 不根据任何列内容 而只是产生一个顺序整数索引 例如 select count as usercount from users group by age 会返回类似的内容 1 12 2 78 3 4 4 42 那
  • 无法解析符号“createFromResource”

    我完全不明白这意味着什么 我已经进行了一些搜索 但到目前为止还没有找到任何帮助 我正在使用 android studio 并有一个对话框片段 我正在其中设置一个微调器 Spinner systemFontSpinner Spinner vi
  • Seaborn 热图更改 yticks 的日期频率

    我的问题与该主题遇到的问题类似 更改多索引数据帧的热图 xticks https stackoverflow com questions 66897981 change heatmaps yticks for multi index dat
  • 本地主机上的谷歌距离矩阵

    我正在尝试使用谷歌距离矩阵来找出从一个源到一个目的地的距离和时间 我正在调用该函数 postCode change function var address sydney var source melbourne var url https
  • EL 中的#{component} 到底是什么?

    根据https code google com p primefaces issues detail id 4720 https code google com p primefaces issues detail id 4720 The
  • GTK信号什么时候发出

    给定从用户连接到回调函数的信号 gtk main 线程将休眠 直到发出信号 我搜索了有关如何或何时发出的详细信息 但找不到任何我不知道的信息 更具体地说 它是异步发出的 以便我可以在某个函数中间调用信号 还是等待特定函数先返回 发出 切换页
  • CKReference 的 CloudKit 订阅通知未按预期工作

    我正在尝试为包含带有用户 CKReference 的字段的记录设置 CKSubscription 但每当创建记录时 它都会忽略compoundPredicate的这一部分 并且通知永远不会出现 在 CKSubscription 的谓词中使用
  • 我可以使用本地文件系统中的图像作为 HTML 的背景吗? [复制]

    这个问题在这里已经有答案了 我有一个托管在远程 Web 服务器上的 HTML 文档 我试图让网页上的元素之一使用本地文件系统中的图像文件作为其背景图像 Chrome Safari 或 Firefox 都不行 还没有尝试过 IE 这是我迄今为
  • 如何通过验证保留 JSF 视图参数

    我将 JSF 2 0 CDI 和 PrimeFaces 2 2 1 用于许多 CRUD 表单 这些表单允许用户通过单击数据表中的链接来查看或更新现有实体的属性 其中实体的标识符被传递到CRUD 形式作为视图参数 我在 PrimeFaces
  • 内存是否加密?

    我想将一些数据存储在变量中 并且我知道变量存储在内存中 内存中的数据是否被加密 另外 软件是否可以读取存储在内存中的变量名称并能够从中实际提取数据 内存是not在我所知道的任何平台上进行加密 无论如何 它的价值有限 因为处理器通常必须对明文
  • R 中 MuMIn 包的标准化

    我使用 R 中的 MuMIn 包来选择模型并计算输入变量 rain brk onset wid 的效应大小 为了使变量之间的效应大小具有可比性 我使用标准化函数对它们进行了标准化arm包裹 这是我正在遵循的代码 供参考 请参阅本文附录 ht
  • StreamReader 和二进制数据

    我有这个包含不同字段的文本文件 某些字段可能包含二进制数据 我需要获取文件中的所有数据 但现在使用 StreamReader 时 它不会读取二进制数据块以及之后的数据 解决这个问题的最佳解决方案是什么 Example field1 fiel
  • 使用 Java 8 的复杂自定义收集器

    我有一个对象流 我想通过以下方式收集它们 假设我们正在处理论坛posts class Post private Date time private Data data 我想创建一个列表 其中包含哪些组posts通过一段时间 如果没有post
  • 使用 Java 通过 Rest API 在 Confluence 中创建页面

    有谁有关于如何使用 Confluence 的 RESTful API 在 Confluence 中创建页面 wiki 条目的示例吗 我正在尝试用 Java 编写一些可以做到这一点的东西 先感谢您 谢谢 我已经在线检查了文档 但找不到任何示例