最近搭建環境時,想使用@ResponseBody註解返回JSONObject數據,但是提示Http 500錯誤:
上網查了一下,才發現,@ResponseBody不是拿來就能用的,還需要進行下配置,配置對應的conver。
找了好一會,終於搞定,但是感覺好多朋友的博文基本都是轉載,一個錯就導致了個個錯,所以決定自己整理一份
下面先說Jackson的方式
-
添加jar包支持
我的項目是Maven項目,所以pom.xml文件中添加依賴如下:
<!-- Jackson依賴 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.3</version>
</dependency
-
配置SpringMVC的配置文件
這裏要注意SpringMVC和Jackson的版本,有部分老版本會使用org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter和org.springframework.http.converter.json.MappingJackson2HttpMessageConverter的配置。
我這裏使用的是4.2的SpringMVC和2.7的Jackson
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list >
<ref bean="mappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 註解驅動配置 -->
<mvc:annotation-driven />
-
接下來,就可以使用@ResponseBody進行一下測試了
接下來再說下使用FastJson的情況下怎麼配置
-
添加jar包支持
<!-- FastJson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.8</version>
</dependency>
-
修改SpringMVC配置文件
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list >
<ref bean="mappingJacksonHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
-
OK,大功告成,測試一下,沒問題就繼續前進之路吧。
或者是下面這種形式
<!-- 註解驅動配置 -->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="false">
<!-- 避免IE執行AJAX時,返回JSON出現下載文件 -->
<bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!-- 這裏順序不能反,一定先寫text/html,不然ie下出現下載提示 -->
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
其實Jackson和Fastjson的配置大同小異,只是使用的不同的conver文件而已