Spring MVC返回json数据的方式有以下几种:

   (1)直接 PrintWriter 输出

   (2)使用 JSP 视图

   (3)使用Spring内置的支持

 

本文说明的是使用Spring内置的功能。

 

以下为3.1之前的配置:

<beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 

 <propertyname="messageConverters"> 

 <list> 

  <bean 

   class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> 

 </list> 

 </property> 

</bean>    

 

以下为3.1的配置:

spring mvc 3.1之后使用RequestMappingHandlerMappingRequestMappingHandlerAdapter

替代了原有的DefaultMethodHandlerMappingAnnotationMethodHandlerAdapter

所以,3.1的返回json配置可以使用如下配置:

<bean 

class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" 

       p:ignoreDefaultModelOnRedirect="true" > 

           <property name="messageConverters"> 

                <list> 

                    <beanclass="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> 

                </list> 

           </property> 

       </bean> 

 

// WEB-INF/lib 中添加

jackson-mapper-asl-1.6.4.jar

jackson-core-asl-1.6.4.jar

// Controller 使用:@ResponseBody 标注方法,该方法返回Java对象(支持复杂对象),

:

 @ResponseBody

public User getUser(User u){ 

   return u; 

{color:black}} 

 

MappingJacksonHttpMessageConverter 会将对象转换为 JSON 输出

 

注意:当springMVC-servlet.xml中使用<mvc:annotation-driven />时,如果是3.1之前已经默认注入AnnotationMethodHandlerAdapter3.1之后默认注入RequestMappingHandlerAdapter,只需加上上面提及的jar包即可!

 

注意:默认情况下MappingJacksonHttpMessageConverter 会设置contentapplication/json,在IE9下返回会出现提示下载的现象,出现这种情况可以手动指定头信息为"text/html",或者"/"(所有,不确定就设置为这个)。如果是手动注入RequestMappingHandlerAdapter 可以这样设置

 

<bean     class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"   p:ignoreDefaultModelOnRedirect="true"> 

   <property name="messageConverters"> 

       <list> 

           <bean                  class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" 

               p:supportedMediaTypes="/" /> 

       </list> 

   </property> 

</bean> 

 

 如果是采用mvc:annotation-driven标签 可以这样注入信息

<mvc:annotation-driven> 

       <mvc:message-converters register-defaults="true"> 

           <bean                      class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" 

                   p:supportedMediaTypes="/" /> 

       </mvc:message-converters> 

   </mvc:annotation-driven> 

注入的message-converters优先级高于默认注入的json转换器。