0

我正在尝试使用 responseBody 注释在控制器中返回 xml。除了 IE(我在 Windows 7 x64 中使用 IE 9)之外,每个浏览器都可以正常工作。我发现它会请求几次,然后请求失败。希望你们中的一些人遇到这个并提供一些帮助。我的代码如下:UserController.java。这只是一个简单的控制器,返回一个代表用户的对象。

package com.spring;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController
{

    @RequestMapping("/user")
    public @ResponseBody
    User getUser()
    {
        User user = new User();
        user.setName("shun");
        user.setPassword("123123");
        return user;
    }

}

@XmlRootElement(name = "user")
class User
{
    private String name;
    private String password;

    @XmlElement
    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    @XmlElement
    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password = password;
    }
}

网页.xml:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

我使用 spring-servlet.xml 作为我的 spring 配置文件。如下:

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

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

    <bean
        class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="mediaTypes">
            <map>
                <entry key="xml" value="application/xml" />
                <entry key="json" value="application/json" />
                <entry key="jsonp" value="application/javascript" />
            </map>
        </property>
        <property name="defaultContentType" value="text/html" />
        <property name="ignoreAcceptHeader" value="true" />
        <property name="favorPathExtension" value="true" />
        <property name="favorParameter" value="true" />
        <property name="parameterName" value="return_fmt"></property>
        <property name="viewResolvers">
            <list>
                <bean
                    class="org.springframework.web.servlet.view.BeanNameViewResolver" />
            </list>
        </property>
        <property name="defaultViews">
            <list>
                <bean
                    class="org.springframework.web.servlet.view.xml.MarshallingView">
                    <property name="marshaller">
                        <ref bean="castorMarshaller" />
                    </property>
                </bean>
                <bean
                    class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
            </list>
        </property>
    </bean>
    <bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller" />

</beans>

顺便说一句,我的spring版本是3.1.0。我也用3.0.7进行测试,结果是一样的。在我开始我的项目后,我使用 chrome,firefox 访问它,一切都很好。但是当我尝试在 IE 9 中访问它时,它显示了这个结果。

谁能告诉我发生了什么?

4

2 回答 2

0

我认为问题不在于您的控制器。我认为问题只是 IE 不显示 XML 内容。

在 IE 中:发送请求并获得响应后,打开上下文菜单并单击“显示源代码”(或类似的东西,我只有一个德语 IE)。

于 2012-09-25T06:44:14.410 回答
0

最后,我使用requestMapping 上的produces 选项解决了它。这会强制 spring 返回 application/xml 格式的结果,然后 IE 可能会显示它。

于 2012-09-26T09:06:21.487 回答