如何从 Apache CXF REST 服务返回 XML 并将其转换为 json?

发布于 2024-10-28 15:46:38 字数 454 浏览 2 评论 0原文

我有一个使用 Apache CXF 和 Spring 构建的简单 REST 服务。我正在利用扩展映射内容根据 URL(http://.../hello.json 等)返回 json 或 xml。当返回 JAXB 注释的 Java 类时,这非常有效。

有没有一种简单的方法可以让 Apache CXF 自动将手工制作的 XML 转换为 json?我需要从服务中返回什么?

我知道我可以按如下方式返回 XML,但这不会自动将 XML 转换为 json:

public Response get() {
    return Response.status(200).type(MediaType.TEXT_XML).entity("<hello>world</hello>").build();
}

我将从文件系统或其他存储返回静态 XML 文档。我需要能够返回 json。

I have a simple REST service built using Apache CXF and Spring. I am making use of the extension mapping stuff to return json or xml depending on the URL (http://.../hello.json etc.). This works very well when JAXB annotated Java classes are returned.

Is there an easy way to get Apache CXF to convert hand crafted XML to json automatically? What would I need to return from my service?

I know I can return the XML as follows but this won't auto convert the XML to json:

public Response get() {
    return Response.status(200).type(MediaType.TEXT_XML).entity("<hello>world</hello>").build();
}

I will be returning static XML documents from the file system or some other store. I need to be able to return json instead.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

计㈡愣 2024-11-04 15:46:38

我最终采取了不同的(更好的)方法。 XML 文档由 servlet 提供,并使用以下代码转换为 json:

public void convertXmlToJson(InputStream in, OutputStream out) throws XMLStreamException {
    XMLEventReader xmlIn = XMLInputFactory.newFactory().createXMLEventReader(in);
    OutputStreamWriter osw;
    try {
        osw = new OutputStreamWriter(out, "UTF8");
    } catch (UnsupportedEncodingException e) {
        throw new RuntimeException(e.toString(), e); // not possible really
    }
    MappedXMLStreamWriter jsonOut = new MappedXMLStreamWriter(new MappedNamespaceConvention(), osw);
    AbstractXMLEventWriter xmlOut = new AbstractXMLEventWriter(jsonOut);
    while (xmlIn.hasNext()) {
        XMLEvent ev = xmlIn.nextEvent();
        if (ev instanceof Characters && ((Characters)ev).isWhiteSpace()) {
            continue;
        }
        xmlOut.add(ev);
    }
    xmlOut.close();
}

I took a different (better) approach in the end. The XML docs are served by a servlet and converted to json with this code:

public void convertXmlToJson(InputStream in, OutputStream out) throws XMLStreamException {
    XMLEventReader xmlIn = XMLInputFactory.newFactory().createXMLEventReader(in);
    OutputStreamWriter osw;
    try {
        osw = new OutputStreamWriter(out, "UTF8");
    } catch (UnsupportedEncodingException e) {
        throw new RuntimeException(e.toString(), e); // not possible really
    }
    MappedXMLStreamWriter jsonOut = new MappedXMLStreamWriter(new MappedNamespaceConvention(), osw);
    AbstractXMLEventWriter xmlOut = new AbstractXMLEventWriter(jsonOut);
    while (xmlIn.hasNext()) {
        XMLEvent ev = xmlIn.nextEvent();
        if (ev instanceof Characters && ((Characters)ev).isWhiteSpace()) {
            continue;
        }
        xmlOut.add(ev);
    }
    xmlOut.close();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文