SpringMVC使用了@ResponseBody報406錯誤的問題
主要是幾點:
返回json主要有幾種方法
1.直接使用
- <mvc:annotation-driven/>
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
這兩個類,如果加入了Jackson的相關jar包,那麼會spring使用Jackson作為轉換器(不用手動配置,原始碼暫時沒找到在哪),
這樣就只需要加上@Response就可以了
注意:在3.2版本之前使用的還是
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
這兩個類,這兩個類的實現又不一樣,需要注意
2.配置
- <mvc:message-converters>
- <mvc:annotation-driven>
- <mvc:message-converters>
- <beanclass="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
- <propertyname="supportedMediaTypes">
- <list>
-
<value>application/json;
- </list>
- </property>
- </bean>
- </mvc:message-converters>
- </mvc:annotation-driven>
3.使用bean標籤來初始化
- <beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
- <beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
- <propertyname="messageConverters">
- <list>
- <beanclass="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
- <propertyname="supportedMediaTypes">
- <list>
- <value>text/html; charset=UTF-8</value>
- <value>application/json;charset=UTF-8</value>
- </list>
- </property>
- </bean>
- </list>
- </property>
- </bean>
我自己碰到的大概就這幾種方法,另外還有幾個地方需要注意
1.Jackson有分兩種
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
org.springframework.http.converter.json.MappingJacksonHttpMessageConverter
網上找到的是說和Jackson版本有關,2.x版本的才是使用2,我自己試的時候是兩種都可以的,由於找不到原始碼,所以暫時不知道是什麼原因
2.mvc:message-converters這個子標籤在3.1之後才有的,如果使用的不是3.1的spring,但是卻是寫成了3.1的標籤,那麼即使配置了轉換器,這個也是無效的配置