Spring REST XML服务不接受XML作为“接受”标头

时间:2012-01-17 05:20:30

标签: java spring spring-mvc

我定义了几个REST服务,这些服务当前正在将JSON格式的对象作为服务响应主体返回。我正在尝试使这项服务也接受XML作为一项新要求,尽管它不接受这一点。

我正在关注spring-mvc-showcase sample project并且几乎完全相同地设置了pom.xml个依赖关系,我的服务定义同样非常简单。

@Controller
@RequestMapping(value = "api/sales/*")
public class SalesController {

    @RequestMapping(value = "/countries", method = RequestMethod.GET)
    @ResponseBody
    public List<NamedEntity> getCountries() {

NamedEntity具有相应的@XmlRootElement注释。

有人可以解释我需要将ResponseBody package org.springframework.samples.mvc.messageconverters; @Controller @RequestMapping("messageconverters/*") public class MessageConvertersController { @RequestMapping(value="/xml", method=RequestMethod.GET) public @ResponseBody JavaBean writeXml() { return new JavaBean("bar", "fruit"); 作为{{1}}使用的最基本要求。

编辑:添加了春季MVC示例。

来自spring-mvc-showcase的样本如下:

{{1}}

4 个答案:

答案 0 :(得分:1)

  

检查请求标头,客户端需要在标头中有“application / xml”,而不是“application / json”

说完这些后,请确保已为您的对象注册了适当的消息转换器。如果您使用的是Java 6,那么Spring将自动检测类路径中的JAXB,否则您可以手动添加转换器。

答案 1 :(得分:0)

将@Produces(“application / xml”)添加到getCountries()

答案 2 :(得分:0)

您需要发送“application / xml”,而不是“application / application + xml”。还可以考虑使用:

@RequestMapping(value = "/countries", method = RequestMethod.GET, produces={"application/json", "application/xml"})

这可确保您的方法仅响应这些媒体类型,并使用406 HTTP状态代码拒绝其他媒体类型。

答案 3 :(得分:0)

尝试这个调度程序servlet配置。

<mvc:annotation-driven
        content-negotiation-manager="contentManager" />

<bean id="contentManager"
        class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="favorPathExtension" value="false" />
        <property name="ignoreAcceptHeader" value="false" />
        <property name="defaultContentType" value="application/json" />
        <property name="useJaf" value="false" />
    </bean>

和一些依赖

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.4.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.4.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.4.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.4.3</version>
        </dependency>