spring responseBody返回xml在IE下有问题

我使用spring的responseBody返回xml,在chrome,firefox下均没问题,但在IE下会出现应用程序出错的问题。
我的代码如下:
UserController:
[code="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;
}
}

[/code]

web.xml
[code="xml"]
<?xml version="1.0" encoding="UTF-8"?>


spring
org.springframework.web.servlet.DispatcherServlet
1


spring
/


index.jsp


[/code]

spring-servlet.xml
[code="xml"]
<?xml version="1.0" encoding="UTF-8"?>
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" />

[/code]

当我用其他浏览器的时候,返回正常,如下:

[img]http://dl.iteye.com/upload/attachment/0074/3130/9124add8-e4e1-31a8-b13b-f6ec0aaf059c.png[/img]

而用IE的时候,返回如下:

[img]http://dl.iteye.com/upload/attachment/0074/3125/d7768747-ca04-3d0d-8916-905b2da1ddec.png[/img]

我在项目中有打印执行方法的次数,发现在IE中会进行两次访问,之后就出现如图的错误,猜想可能是进行了循环的访问。

有哪位朋友遇到过这样的问题,或知道出错在哪里,忘告知,多谢。

2个回答

这估计是浏览器问题 跟你程序无关

你到chrome下debug看戏 response header 发上来

cxshun
cxshun 可以了,非常感谢。
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian @RequestMapping(value="/user", produces={"application/xml"}) 强制生产xml数据 ongnianIE的 Content-Type: application/xaml+xml XAML是eXtensible Application Markup Language的英文缩写,相应的中文名称为可扩展应用程序标记语言,它是微软公司为构建应用程序用户界面而创建的一种新的描述性语言。XAML提供了一种便于扩展和定位的语法来定义和程序逻辑分离的用户界面,而这种实现方式和ASP.NET中的"代码后置"模型非常类似。XAML是一种解析性的语言,尽管它也可以被编译。它的优点是简化编程式上的用户创建过程,应用时要添加代码等。 很显然估计IE9无法可视化这个xaml 因此就不显示 此时我们强制返回 Content-Type application/xml
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian 你能代码发到 zhangkaitao0503@gmail.com 我测试下
7 年多之前 回复
cxshun
cxshun 我照你的修改,貌似还是不行。只有在Content-Type为application/xhtml+xml的时候才可以显示,其他在为application/xaml+xml时,会报错。而且我照你的代码修改,它的response header里面的contentType还是没改。
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian IE的 Content-Type: application/xaml+xml 这个估计跟这个 Content-type有关, <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> <property name="marshaller"> <ref bean="castorMarshaller"/> </property> <property name="contentType" value="application/xml;charset=utf-8"/> </bean>
7 年多之前 回复
cxshun
cxshun 我发现,如果我把IE设成IE9标准模式,是没问题的,可以正确返回,虽然没有XML样式,但起码是返回了。如果把IE设成其他模式,它都不能返回,会出现应用程序出错的情况。
7 年多之前 回复
cxshun
cxshun 我看了一下配置,我那个xml dom document本来就是启用的。现在只是它连返回都返回不了,这个才是比较麻烦的问题。
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian 嗯 这是ie的问题 你试试 · Click Tools (the gear icon on the right side of the toolbar) · Click Manage add-ons · Under Show:, click All add-ons · Click XML DOM Document · Click Enable · Click Close · Close Internet Explorer (all windows) · Open Internet Explorer
7 年多之前 回复
cxshun
cxshun 嗯,对,我的是IE9,但我的问题不是它显示成文字,而是根本不显示,它显示的是我问题中发布的图片那个应用程序出错。
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian Check to see if your XML DOM Document add-on has been disabled. You can check this by: · Click Tools (the gear icon on the right side of the toolbar) · Click Manage add-ons · Under Show:, click All add-ons · Click XML DOM Document · Click Enable · Click Close · Close Internet Explorer (all windows) · Open Internet Explorer
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian Content-Type application/xaml+xml ie是这个 你的ie是IE9?? http://answers.microsoft.com/en-us/ie/forum/ie9-windows_7/ie9-xml-displays-as-text/ebc5c7e2-6b30-4f0f-acb3-ffe6df33c173
7 年多之前 回复
cxshun
cxshun 我用fiddle 2看到response 如下: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: application/xaml+xml Transfer-Encoding: chunked Date: Tue, 25 Sep 2012 05:47:58 GMT 70 <?xml version="1.0" encoding="UTF-8" standalone="yes"?><user><name>shun</name><password>123123</password></user> 0 发现它返回是正常的,但在IE上面就是不能显示。
7 年多之前 回复
cxshun
cxshun chrome里面的response header是这样的。 Content-Type:application/xhtml+xml Date:Tue, 25 Sep 2012 05:34:50 GMT Server:Apache-Coyote/1.1 Transfer-Encoding:chunked IE里面的是这样的: 键 值 响应 HTTP/1.1 200 OK Server Apache-Coyote/1.1 Content-Type application/xaml+xml Transfer-Encoding chunked Date Tue, 25 Sep 2012 05:36:28 GMT 我发现都没什么问题,但IE里面它会进行好几次的请求。
7 年多之前 回复

应该是安全ie安全机制导致的 。。你试试 从另一台电脑访问你的应用

cxshun
cxshun 也是一样的,我有让同事试过,都是不行的。
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问