【问题标题】:Use Spring-Data-Rest to return response as XML instead of JSON使用 Spring-Data-Rest 以 XML 而不是 JSON 的形式返回响应
【发布时间】:2012-07-11 17:47:47
【问题描述】:

Spring-data-rest 目前是 RC1(即将于 7 月 16 日上市),但文档仍然有些粗略。到目前为止,我找到的所有示例代码都显示默认为 JSON 的响应,但我需要 XML,理想情况下是基于 ACCEPT 标头的 XML 或 JSON。我在some comments in a DZone link 中找到了一个表明将支持 XML 的来源。但那是在 M2 发布期间发布的,在 RC1 之前。我也没有在项目下的问题中看到任何内容。

那么有没有人知道如何让 RC1(或 SNAPSHOT)生成 XML 来代替 JSON 或在 JSON 之外生成 XML。

【问题讨论】:

    标签: java xml json rest spring-data-rest


    【解决方案1】:

    我希望在 Spring Data REST 中生成 XML 有一个简单的答案,但我还没有找到答案。我们默认使用 JSON,因为我们认为这是一个用于传输对象的超级简单和轻量级的“协议”,并且在大多数情况下都可以很好地工作。

    XML 有几个问题我们还没有找到合理的答案:

    • 如何在 XML 中表示对象?我是使用属性名称作为元素名称,还是使用标准元素名称并将属性名称放在属性中?
    • 我在哪里确定属性的类型(无论是复杂还是简单、Long、BigInteger 或你有什么)?
    • 我是否放弃了所有自定义映射信息而只使用 JAXB 或 Spring OXM?
    • 如何处理链接?我是否使用 Atom 命名空间链接元素?
    • 如果我已经在使用 Atom,那么为什么不对所有内容使用 Atom 表示?

    由于回答这些问题必然会涉及到比我们还没有的更多的社区意见,因为该项目是如此新,所以我想我们会等到 1.0 后的版本来添加 XML 支持。如果在这个方向上有足够的动力,优先事项显然会发生变化,但我认为下周不会发生这种情况。

    您可以覆盖一些机制(毕竟这只是一个 Spring MVC 应用程序)以产生您想要的任何类型的响应。如果您使用最新的快照并覆盖 the RepositoryRestMvcConfiguration.contentNegotiatingViewResolver() method,您可以提供从导出器出来的 DTO 的完全不同的表示。这被称为in the wiki。您必须检查 the source code of JsonView 以获取有关 DTO 内部外观的必要详细信息,但将 JsonView 替换为 MyOwnXmlView 相对容易。

    注意:这仅适用于当前版本的 REST 导出器。 GA 版本将有不同的机器来渲染输出。不过,我将提供挂钩来执行任何类型的输出渲染,因此您应该能够通过在配置上设置属性来覆盖输出渲染。如果您为此版本创建 View 子类,则很可能只需将其更改为 GA 版本的 HttpMessageConverter

    【讨论】:

    • 顺便说一句,现在 JSON 接口是可以接受的。但你给出了一个很好的答案。
    【解决方案2】:

    使用最新的 Spring IO 平台,我们可以实现这一点,而使用 IO 平台,我们 也不必担心版本。

    已经在另一个堆栈溢出链接中发布了如何实现如下:

    Spring Boot REST with XML Support

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 2016-07-16
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多