Folder Maker 处理 POST 的 Web 脚本
Hello World Web Script 处理 GET HTTP 方法。但是如果你想在服务器上创建数据怎么办?为此,你的 Web 脚本应该处理 POST。
这是一个在 Company Home 中创建新文件夹的简单示例。通过使用看起来像这样的 JSON 主体进行 POST 调用来调用它:
{'name':'testfolder'}
(可选)你可以通过将标题或描述作为正文的一部分传递给文件夹,例如:
{
'name':'testfolder',
'title':'test title',
'description':'test description'
}
描述符名为 foldermaker.post.desc.xml:
<webscript>
<shortname>Folder Maker</shortname>
<description>Creates folders</description>
<family>Examples</family>
<url>/example/folders</url>
<format default="json"></format>
<authentication>user</authentication>
</webscript>
可选的 family
元素是在 Web 脚本索引中对 Web 脚本进行分组的便捷方式。format
元素声明此 Web 脚本返回 JSON。
控制器名为 foldermaker.post.json.js:
var name = title = desc = null;
var name = json.get('name');
try {
title = json.get('title');
} catch (err) {}
try {
desc = json.get('description');
} catch (err) {}
var folder = companyhome.createFolder(name);
var needsSave = false;
if (title != null) {
folder.properties['cm:title'] = title;
needsSave = true;
}
if (desc != null) {
folder.properties['cm:description'] = desc;
needsSave = true;
}
if (needsSave) {
folder.save();
}
model.id = folder.nodeRef.toString();
model.name = name;
model.title = title;
model.description = desc;
请注意,此控制器的名称中包含 json
。这告诉 Alfresco 期望 JSON 有效载荷。Alfresco 将自动解析 JSON 并将其放在名为 json
的根变量中。
控制器从 JSON 中获取名称,标题和描述,并使用名为 companyhome
的根范围变量创建文件夹。
如果在这些属性中传递标题或描述,则保存。
在将控制权交给视图之前,在模型上设置传入的值以及新文件夹的节点引用。
该视图名为 foldermaker.post.json.ftl:
{
<#if title??>
"title": "${title}",
</#if>
<#if description??>
"description": "${description}",
</#if>
"id": "${id}",
"name": "${name}"
}
这个 freemarker 只是将模型上设置的值作为 JSON 回送。标题和描述可能并不总是存在,因此视图使用 if 语句中内置的 Freemarker null 检查来避免在未设置时返回那些。
任何 HTTP 客户端都可用于测试此 Web 脚本。这是使用 curl 的样子:
jpotts$ curl -uadmin:admin -H "content-type: application/json" -X POST "http://localhost:8080/alfresco/s/example/folders" -d "{'name':'testfolder','title':'test title', 'description':'test desc'}"
{
"title": "test title",
"description": "test desc"
"id": "workspace://SpacesStore/cc26a12f-306b-41f1-a859-668f11fc2a54",
"name": "testfolder"
}
请注意,curl 正在传递基本身份验证凭据。在这种情况下,它使用 admin
。由于此示例在 Company Home 中创建项目,因此你必须使用具有相应权限的用户来执行此操作。
此 Web 脚本没有真正的错误检查。如果你未传入名称或传入已使用过的名称,则会看到错误。