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

引起原因:

1.web.xml配置的SpringMVC *.html 

2.jar包的引用问题

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


com.fasterxml.jackson.core
jackson-core
2.5.0


com.fasterxml.jackson.core
jackson-databind
2.5.0


com.fasterxml.jackson.core
jackson-annotations
2.5.0

情况一:

web.xml配置如下:

1.*.html拦截html后缀的请求


spring-mvc
org.springframework.web.servlet.DispatcherServlet

contextConfigLocation
classpath*:spring-mvc.xml

1


spring-mvc
*.html


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

此时浏览器不报错了!!

为此我们需要进行一个配置,我们要引入内容协商管理器,并将其加入

代码:

   
  
	       
	       
	       
	        
	        atom=application/atom+xml  
	        html=text/html  
	        json=application/json  
	        *=*/*  
	         
	      
 	  
在管理器中 mediaTypes变量配置了对应类型value的 Content-Type,紧接着配置,加入mvc的引用中;此时浏览器访问正常;

情况二:

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



你可能感兴趣的:(JavaEE)