1. 程式人生 > >springmvc @ResponseBody返回json 報406 not acceptable

springmvc @ResponseBody返回json 報406 not acceptable

今天在整合小專案時,碰到一個問題406  , controller中使用springMVC的@ResponseBody來返回json格式資料,出現了406,controller程式碼如下

@Controller
@RequestMapping(value = "/user/*")
public class UserController {

	@Autowired
	public UserService userService;

	@RequestMapping(value = "user.do")
	@ResponseBody
	public User user(String userId) {
		
		User user = userService.getUserById(userId);	
		
		return user;

	}
	
}

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

	<!-- 引入dbconfig.properties屬性檔案 -->
	<context:property-placeholder location="classpath*:conf/*.properties" />

	<!-- 啟動註解驅動的Spring MVC功能,註冊請求url和註解POJO類方法的對映 -->
	<!-- 通過註解,把URL對映到Controller上,該標籤預設註冊RequestMappingHandlerMapping和RequestMappingHandlerAdapter -->
	<mvc:annotation-driven />
	<!-- 啟動包掃描功能,以便註冊帶有@Controller、@Service、@repository、@Component等註解的類成為spring的bean -->
	<context:component-scan base-package="com.hn.alter.*" />
	<!-- 載入組裝所以配置檔案 context:component-scan註冊後可以省略當前配置 <context:annotation-config 
		/> -->
	<import resource="spring-mybatis.xml" />

	<!-- 防止配置url-pattern時過濾靜態檔案 -->
	<mvc:resources location="/" mapping="/*" />
	<mvc:resources mapping="/resources/**" location="/resources/" />
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/" />
		<property name="suffix" value=".jsp" />
	</bean>
</beans>
pom.xml檔案如下
	<!-- json -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.7.1</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-core-asl</artifactId>
			<version>1.9.13</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.13</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>2.7.1</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.7.1-1</version>
		</dependency>
其中網友也出現了一些其他錯誤導致的,有以下幾種:

1、沒有配置<mvc:annotation-driven />

<strong><!-- 通過註解,把URL對映到Controller上,該標籤預設註冊RequestMappingHandlerMapping和RequestMappingHandlerAdapter -->
	<mvc:annotation-driven /></strong>
2、沒有新增jar包,但是我添加了這兩個包
jackson-core-asl.jar和jackson-mapper-asl.jar
3、沒有配置註解handler(跟spring版本有關,我用版本不用配置這個,自動注入了RequestMappingHandlerMapping和RequestMappingHandlerAdapter見情況一)
<strong>    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
            <property name = "messageConverters">  
              <list>  
               <bean class = "org.springframework.http.converter.StringHttpMessageConverter">  
                    <property name = "supportedMediaTypes"><list><value>text/plain;charset=UTF-8</value></list></property>  
               </bean>  
              </list>  
             </property>  
        </bean>  </strong>
4、也就是我碰到的問題,沒有新增另外一個包jackson-databind.jar,苦笑不得
<strong><dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.7.1-1</version>
		</dependency></strong>
記錄一下希望也碰到這個問題的朋友及時解決