RESTFUL WebService Spring,使用XML替代JSON?

5
我正在尝试在Spring中将对象作为XML返回,就像这个指南中所示:http://spring.io/guides/gs/rest-service/。但是我希望该对象以XML而不是JSON的形式返回。有人知道我该如何做吗?Spring是否有任何依赖项可以轻松地为XML执行此操作?还是说我需要使用一个marshaller,然后以其他方式返回XML文件?

它不起作用 http://stackoverflow.com/questions/38026928/spring4-0-rest-service-not-working-for-xmlresponse - user18181818
2个回答

11

Spring默认支持JSON,但若要支持XML,请按以下步骤操作 -

  1. 在你想要作为响应返回的类中添加XML注解,例如:
    @XmlRootElement(name = "response")
    @XmlAccessorType(XmlAccessType.FIELD) => this is important, don't miss it.
    public class Response {
        @XmlElement
        private Long status;
        @XmlElement
        private String error;

        public Long getStatus() {
            return status;
        }

        public void setStatus(Long status) {
            this.status = status;
        }

        public String getError() {
            return error;
        }

        public void setError(String error) {
            this.error = error;
        }
    }

在restful方法的@RequestMapping中添加produces和consumes,如下所示,这有助于确保您支持哪种响应和请求类型。如果您只想要xml格式的响应,则只需添加produces="application/xml"即可。
@RequestMapping(value = "/api", method = RequestMethod.POST, consumes = {"application/xml", "application/json"}, produces = {"application/xml", "application/json"})

公共的

  1. 接下来,确保你从方法调用中返回响应对象,像下面这样做。你可以在返回类型之前添加@ResponseBody,但是根据我的经验,即使没有添加@ResponseBody,我的应用程序也可以正常工作。
public Response produceMessage(@PathVariable String topic, @RequestBody String message) {
    return new Response();
}

现在,如果您支持多种产品类型,那么根据客户端在HTTP请求头中发送的Accept,Spring Restful服务将返回该类型的响应。如果您只想支持xml,则只需生成'application/xml',响应将始终为xml。

如果我想在 Json 和 Xml 中使用相同的实体,应该如何做? - Mukti
据我所知,Spring 默认支持 JSON,因此您可以使用相同的实体,并像上面建议的那样对其进行注释。您只需要在请求映射中使用 produces = {"application/xml", "application/json"} 来支持两种或任何一种类型的实体。现在,如果客户端请求 JSON 内容类型,则响应将以 JSON 格式发送。 - Vikram Gulia

8
如果你在bean中使用JAXB注解来定义@XmlRootElement@XmlElement,那么它应该将其转换为xml格式。当Spring看到以下情况时,它将把bean转换为xml:
  • 对象使用JAXB注解
  • JAXB库存在于类路径中
  • 启用了“mvc:annotation-driven”
  • 返回方法使用@ResponseBody注解
请参考以下示例以了解更多信息:

http://www.mkyong.com/spring-mvc/spring-3-mvc-and-xml-example/


@mikhail90 如果设置了JSON的HttpMessageConverter,那么仅使用@ResponseBody是不够的。基本上,Spring将使用它找到的第一个可以执行转换的转换器。一种安全的方法是返回带有MediaType.APPLICATION_XMLResponseEntity - Sotirios Delimanolis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接