java - Spring MVC REST - 根据请求内容类型返回 xml 或 json

标签 java xml spring rest spring-mvc

我正在尝试创建 RESTful Web 服务,它将根据请求内容类型返回 json 或 xml:

我的 Controller 看起来像这样:

@Controller
public class RESTController {

    @RequestMapping(value="/rest/{id}", method=RequestMethod.GET)
    @ResponseBody
    public User getUser(@PathVariable Long id){
        User user = .....
        return user;
    }

我的用户类如下所示:

@XStreamAlias("user")
public class User {

    private long id;
    private String firstName;
    private String lastName; 
      other setters and getters..............
}

最后我的 Servlet.xml 看起来像这样:

<mvc:annotation-driven />
<context:annotation-config />
<context:component-scan base-package="com.vanilla.rest.controllers" />

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="ignoreAcceptHeader" value="true" />
    <property name="favorPathExtension" value="false" />
    <property name="order" value="1" />
    <property name="mediaTypes">
        <map>
            <entry key="xml" value="application/xml" />
            <entry key="json" value="application/json" />
        </map>
    </property>
    <property name="defaultViews">
        <list>
            <ref bean="xmlView"/>
            <ref bean="jsonView"/>
        </list>
    </property>
</bean>

<bean id="jsonView"
      class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
    <property name="contentType" value="application/json;charset=UTF-8"/>
    <property name="disableCaching" value="false"/>
</bean>

<bean id="xmlView"
      class="org.springframework.web.servlet.view.xml.MarshallingView">
    <property name="contentType" value="application/xml;charset=UTF-8"/>
    <constructor-arg>
        <ref bean="xstreamMarshaller"/>
    </constructor-arg>
</bean>

<bean id="xstreamMarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
    <property name="autodetectAnnotations" value="true" />
    <property name="annotatedClass" value="com.vanilla.rest.entities.User"/>
</bean>

我的问题是,无论我发送什么内容类型,我总是收到 JSON 响应。

enter image description here

最佳答案

看起来你需要添加

Accept: application/xml

到您的请求 header 。

关于java - Spring MVC REST - 根据请求内容类型返回 xml 或 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11817580/

相关文章:

javascript - 无法解析 AJAX 中的 xml 响应

java - 如何使用 Spring RestTemplate 实现 HTTP POST 请求

java - ActiveMQ - 创建队列/目的地的最佳实践

java - 无法转换项目... Intellij IDE 中的文件过早结束错误

java - 如何截断边界框中的文本?

java - Spring 启动 java.lang.ClassNotFoundException

java - 使用 ResponseEntity Spring MVC

Java 字符串索引超出范围 '}' 标记未包含/正确打印

c# - 如何从结果中读取每个 xml 节点

python - 使用 Python 2 在 XML 中按属性查找所有节点