springmvc @ResponseBody返回json 報406 not acceptable
阿新 • • 發佈:2019-02-04
今天在整合小專案時,碰到一個問題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檔案如下
pom.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>
其中網友也出現了一些其他錯誤導致的,有以下幾種:<!-- 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包,但是我添加了這兩個包
3、沒有配置註解handler(跟spring版本有關,我用版本不用配置這個,自動注入了RequestMappingHandlerMapping和RequestMappingHandlerAdapter見情況一)jackson-core-asl.jar和
jackson-mapper-asl.jar
<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>
記錄一下希望也碰到這個問題的朋友及時解決