You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义Magnolia Delivery API的REST响应内容?

自定义Magnolia Delivery API响应结构

当然可以自定义Delivery API的响应内容,针对你的需求,有两种常用实现方式:

1. 配置层面的字段过滤(简单场景)

直接在你的JcrDeliveryEndpointDefinition配置中添加propertyFilter,指定需要保留的字段。系统属性(如@id、@nodeType)和自定义属性都可以通过这种方式筛选:

class: info.magnolia.rest.delivery.jcr.v2.JcrDeliveryEndpointDefinition
workspace: category
rootPath: /
includeSystemProperties: false
bypassWorkspaceAcls: true
depth: 3
nodeTypes:
  - mgnl:folder
  - mgnl:category
childNodeTypes:
  - mgnl:category
  - mgnl:contentNode
# 添加字段过滤配置
propertyFilter:
  include:
    - '@id'       # 系统节点ID
    - '@nodeType' # 节点类型
    - 'level'     # 自定义属性
    - 'relatedUUID0' # 自定义关联UUID属性

注意:如果level是动态计算的字段而非节点存储的属性,这种方式可能不生效,需要用下面的自定义代码方式处理。

2. 自定义ResponseFactory(复杂场景)

如果需要更灵活的控制(比如处理动态字段、修改字段格式等),可以自定义响应工厂类,重写节点序列化逻辑:

步骤1:创建自定义ResponseFactory类

import info.magnolia.rest.delivery.jcr.v2.DefaultJcrDeliveryResponseFactory;
import info.magnolia.rest.delivery.jcr.v2.NodeWrapper;
import javax.jcr.Node;
import java.util.HashMap;
import java.util.Map;

public class CustomCategoryResponseFactory extends DefaultJcrDeliveryResponseFactory {

    @Override
    protected Map<String, Object> buildNode(Node node, NodeWrapper nodeWrapper, int depth) {
        Map<String, Object> filteredNode = new HashMap<>();
        
        // 添加系统属性
        filteredNode.put("@id", nodeWrapper.getId());
        filteredNode.put("@nodeType", nodeWrapper.getNodeType());
        
        // 添加自定义属性
        try {
            if (node.hasProperty("level")) {
                filteredNode.put("level", node.getProperty("level").getString());
            }
            if (node.hasProperty("relatedUUID0")) {
                filteredNode.put("relatedUUID0", node.getProperty("relatedUUID0").getString());
            }
        } catch (Exception e) {
            // 处理属性获取异常
            e.printStackTrace();
        }
        
        return filteredNode;
    }
}

步骤2:更新Endpoint配置

在YAML中指定自定义的响应工厂类:

class: info.magnolia.rest.delivery.jcr.v2.JcrDeliveryEndpointDefinition
workspace: category
rootPath: /
includeSystemProperties: false
bypassWorkspaceAcls: true
depth: 3
nodeTypes:
  - mgnl:folder
  - mgnl:category
childNodeTypes:
  - mgnl:category
  - mgnl:contentNode
# 指定自定义响应工厂
responseFactoryClass: com.yourpackage.CustomCategoryResponseFactory

部署代码并重启Magnolia后,访问原接口就会返回只包含指定字段的JSON响应。

内容的提问来源于stack exchange,提问作者seliboba98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:01:14