【问题标题】:HippoCMS Rest service does not return image linksHippoCMS Rest 服务不返回图片链接
【发布时间】:2015-11-10 06:29:58
【问题描述】:

我是 Hippo CMS 的新手。我正在开发版本 10,我正在使用 angularJS 服务来使用我通过 HippoCms 创建的“横幅”的其余 url。

这是我通过 Hippo 的 Rest Api Manager 创建的横幅的 Rest URL:

http://localhost:8080/site/stbetrest/Banner?_type=json

我在使用该链接时得到的响应是:

    {
        "pageSize": 10,
        "total": 3,
        "items": [
            {
                "content": "<![CDATA[\r\n\r\n          <p>Banner description</p>\r\n\r\n          \r\n]]>",
                "title": "Sample banner"
            },
            {
                "content": "<![CDATA[<p>10 Simple Steps to Green Your Office:</p>\n\n<p>&nbsp;</p>\n\n<p>
<img src=\"/site/pagenotfound\" /></p>]]>",
                "title": "10 Simple Steps to Green Your Office"
            },
            {
                "content": "<![CDATA[<p>How to Green Your Dorm Room</p>]]>",
                "title": "How to Green Your Dorm Room"
            }
        ],
        "currentPage": 1,
        "totalPages": 1
    }

这里的问题是我看不到我在 Hippo 的横幅文档中使用的图像。我想让这些图像/链接将它们加载到在 AngularJs 中创建的轮播中。请指导我如何将图像生成到上述横幅响应中。

更新:

虽然通过'localhost:8080/cms'显示上传的图片,但无法通过响应访问图片:

@XmlRootElement(name = "banner")
@XmlAccessorType(XmlAccessType.NONE)
@HippoEssentialsGenerated(internalName = "gogreen:bannerdocument")
@Node(jcrType = "gogreen:bannerdocument")
public class Banner extends BaseDocument {
    @XmlElement
    @HippoEssentialsGenerated(internalName = "gogreen:title")
    public String getTitle() {
        return getProperty("gogreen:title");
    }

    @XmlJavaTypeAdapter(HippoHtmlAdapter.class)
    @XmlElement
    @HippoEssentialsGenerated(internalName = "gogreen:content")
    public HippoHtml getContent() {
        return getHippoHtml("gogreen:content");
    }

    @HippoEssentialsGenerated(internalName = "gogreen:link")
    public HippoBean getLink() {
        return getLinkedBean("gogreen:link", HippoBean.class);
    }

    @XmlJavaTypeAdapter(KerkRestAdapter.class)
    @XmlElement
    @HippoEssentialsGenerated(internalName = "gogreen:image")
    public Kerk getImage() {
        return getLinkedBean("gogreen:image", Kerk.class);
    }
}

我的内容重写器是:

    public class RestContentRewriter extends SimpleContentRewriter {
   @Override
    protected String rewriteBinaryLink(String binaryLinkSrc, Node node, HstRequestContext requestContext, Mount targetMount) {
        return super.rewriteBinaryLink(binaryLinkSrc, node, requestContext, requestContext.getMount("site"));

    }

我的适配器是:

public class KerkRestAdapter extends XmlAdapter<String, HippoHtml> {

@Override
public HippoHtml unmarshal(String representation) throws Exception {
    throw new UnsupportedOperationException("Unmarshalling not implemented.");
}


@Override
public String marshal(HippoHtml html) throws Exception {
    if (html == null) {
        return null;
    }

    final HstRequestContext context = RequestContextProvider.get();
    //final RestContentRewriter contentRewriter = new RestContentRewriter();
    final ContentReWriter<String> contentRewriter = new RestContentRewriter();

    final String rewrite = contentRewriter.rewrite(html.getContent(), html.getNode(), context, context.getMount("api")); 
    return "<![CDATA[" + rewrite + "]]>";
}

}

附加问题:重写器中使用的挂载点是什么? (休息坐骑名称或gogreen??)

请帮忙!

【问题讨论】:

    标签: rest hippocms


    【解决方案1】:

    您已使用 Essentials Rest 设置工具。这会生成一个示例或演示 Rest 实现。生成设置后,开发人员总是希望扩展和优化结果。

    此设置中富文本内的链接默认为当前挂载生成,即其余挂载。由于无法通过 rest mount 获得图像,因此 HST 生成了 /pagenotfound URL。

    如果您检查 bean 的 Banner,您会看到 HippoHtml 字段使用了 HippoHtmlAdapter。检查它的代码:它使用 SimpleContentRewriter。创建您自己的适配器版本并使用 ContentRewriter 的扩展版本。覆盖#rewriteBinaryLink 方法。在其中调用 super 方法,但将站点挂载指定为目标挂载。

    我认为向站点装载添加 hst:alias 是个好主意,这样您就可以使用别名引用站点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多