使用SpringMVC返回json数据事应注意的事
•发布于   •作者 三国 - 魏  •265 次浏览  •来自 博客

遇到的问题

    springmvc配置的拦截是.html,按照一般页面的习惯,我们把url的后缀配置成。html,这时候就要注意了,平常在

Controller中添加一个@ResponseBody就能够返回json数据,但是这时你使用@ResponseBody时就会报错,

Tomcat中就会报“The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.


原因:

springmvc默认的数据转换管理器ContentNegotiationManagerFactoryBean默认配置 会根据请求路径来解析数据类型。比如a/b.html会当做html文件解析。a/b.json当做json数据解析



解决办法:

修改默认配置指定数据转换管理器

具体配置如下:

1、web.xml中

<!-- 配置SpringMVC核心控制器 -->
	<servlet>
		<servlet-name>springMVC</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>springMVC</servlet-name>
		<!-- 此处可以可以配置成*.do,对应struts的后缀习惯 -->
		<url-pattern>*.html</url-pattern>
	</servlet-mapping>

2、spring-mvc.xml中

<mvc:annotation-driven
		content-negotiation-manager="cnManager" />
	<!-- favorPathExtension属性值默认为true 会根据请求路径来识别你的数据类型,入.html返回html。.json返回json -->
	<bean id="cnManager"
		class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
		<property name="favorPathExtension" value="false" />
		<property name="defaultContentType" value="text/html" />
		<property name="mediaTypes">
			<map>
				<entry key="xml" value="application/xml" />
				<entry key="json" value="application/json" />
			</map>
		</property>
	</bean>


只要在spring-mvc.xml中这样配置就可以了解决json返回在页面上返回不了的情况了

转发:

    http://blog.csdn.net/jiawenbo89/article/details/51733658


0 回复
回到顶部

©2017 Powered by 三十三行伪代码
皖ICP备17005175号-3