如何使用 sling REST api 和 curl 在 AEM 中创建资源映射节点

How to create a resource mapping node in AEM using sling REST api and curl

我正在尝试使用 AEM 6.0 中的 sling api 创建一个节点。现在我知道我可以使用这样的 curl 调用轻松创建节点

curl -u admin:admin -F"jcr:primaryType= sling:Mapping" http://localhost:4502/content/mynode

但是,如果我需要花点心思并尝试创建一个名称类似于 /etc/map.publish.prd/http/prd.rb.mysite.ca

的资源映射节点怎么办?

现在下面的 curl 调用不再有效,因为 url 的一部分被视为选择器

curl -u admin:admin -F"jcr:primaryType= sling:Mapping"  http://localhost:4502/etc/map.publish.prd/http/prd.rb.mysite.com

那么我该如何避免这个问题呢?

我也试过使用名称 属性 来限制 url 的复杂性。

curl -u admin:admin -F"jcr:primaryType=sling:Mapping" -F"name=prd.rb.mysite.com" http://localhost:4502/etc/map.publish.prd/http

但我认为 sling 仍然被 map.publish.prd

搞糊涂了

任何帮助将不胜感激 谢谢

-阿兰

诀窍是 post 到 /etc/*,这会导致 :name 参数按原样用于新节点的路径:

  curl -u admin:admin \
  -F"jcr:primaryType=sling:Mapping" \
  -F:name=./map.publish.prd/http/prd.rb.mysite.ca \
  http://localhost:4502/etc/*

这仅在 /etc/map.publish.prd 尚不存在时有效,否则您可以在树的更下方使用相同的技巧。

这是我们找到的解决方法。 该脚本使用第一次调用在 /tmp 下创建节点,如下所示

curl -X POST -u admin:admin -F"jcr:primaryType=sling:Mapping" http://localhost:4502/tmp/my-temp-site.

从那里,脚本可以根据需要通过更多 curl 调用在 my-temp-site 下添加其他节点。当脚本完成对 my-temp-site 节点的修改后,它会使用 this

将其移动到它的最终位置

curl -X POST -u admin:admin -F":operation=move" -F":dest=/etc/map.publish.prd/http/prd.rb.mysite.ca" http://localhost:4502/tmp/my-tmp-site

我们已经对其进行了测试,到目前为止它对我们有效。

就像@bertrand 提到的那样,我们将在 /tmp/my-temp-site 节点的名称中添加一个时间戳,以使其唯一并避免冲突

-阿兰