SpringMVC @ResponseBody返回json数据 浏览器406 error 解析

引起原因:

1.web.xml配置的SpringMVC <url-pattern>*.html</url-pattern> 

2.jar包的引用问题

SpringMVC4中:引入faster json包:以下给出maven依赖:引入json三大包之后:mvc配置文件中不需要配置messagehandleradapt 添加json转换器;SpringMVC会自动加载json转换器,当存在json包时;

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.5.0</version>
</dependency>

情况一:

web.xml配置如下:

1.<url-pattern>*.html</url-pattern>拦截html后缀的请求

<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>


此时你的请求为html的后缀,返回浏览器的request的header为
 
Content-Type:
text/html;charset=utf-8

 

 
实际上数据此时是json格式,于是浏览器就会报出406错误:(
HTTP 406错误是HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页。一般是指客户端浏览器不接受所请求页面的 MIME 类型),浏览器使用html解析不了json数据,于是报错,也就是说此处如果是
Content-Type:
application/json;charset=UTF-8的类型,浏览器就不会报错了,如下截图:

 

此时浏览器不报错了!!

为此我们需要进行一个配置,我们要引入内容协商管理器,并将其加入<mvc:annotation-driven/>

代码:

<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">   
<property name="favorPathExtension" value="false" />  
	    <property name="favorParameter" value="false" />   
	    <property name="ignoreAcceptHeader" value="false" />   
	    <property name="mediaTypes" >   
	      <value>  
	        atom=application/atom+xml  
	        html=text/html  
	        json=application/json  
	        *=*/*  
	      </value>   
	    </property>  
 	</bean>  
在管理器中 mediaTypes变量配置了对应类型value的 Content-Type,紧接着配置<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"/>,加入mvc的引用中;此时浏览器访问正常;

情况二:

<url-pattern></url-pattern>配置为拦截所有请求,请求无后缀情况下,引入json包,即可使用@ResponseBody 返回json数据,无需配置内容协商管理器;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值