spring MVC 3.1 注解:@ResponseBody 返回json数据

pring mvc如何返回json 数据的,大概有如下几种:

Spring MVC 3.0 返回JSON数据的方法
1. 直接 PrintWriter 输出
2. 使用 JSP 视图
3. 使用Spring内置的支持

以下为3.1之前的配置:

Html代码 收藏代码
  1. <beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  2. <propertyname="messageConverters">
  3. <list>
  4. <bean
  5. class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
  6. list>
  7. property>
  8. bean>

重点来了!

以下为3.1的配置:

spring mvc 3.1之后使用RequestMappingHandlerMappingRequestMappingHandlerAdapter

替代了原有的DefaultMethodHandlerMappingAnnotationMethodHandlerAdapter

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

Html代码 收藏代码
  1. <bean
  2. class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
  3. p:ignoreDefaultModelOnRedirect="true">
  4. <propertyname="messageConverters">
  5. <list>
  6. <beanclass="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
  7. list>
  8. property>
  9. bean>

// WEB-INF/lib 中添加
jackson-mapper-asl-1.6.4.jar
jackson-core-asl-1.6.4.jar
// Controller 中使用:@ResponseBody 标注方法,该方法返回 Java对象(支持复杂对象),

如:

Java代码 收藏代码
  1. public@ResponseBodyUsergetUser(Useru){
  2. returnu;
  3. }

MappingJacksonHttpMessageConverter 会将对象转换为 JSON 输出

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

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

如果是手动注入RequestMappingHandlerAdapter 可以这样设置

Html代码 收藏代码
  1. <bean
  2. class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
  3. p:ignoreDefaultModelOnRedirect="true">
  4. <propertyname="messageConverters">
  5. <list>
  6. <bean
  7. class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
  8. p:supportedMediaTypes="*/*"/>
  9. list>
  10. property>
  11. bean>


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

Html代码 收藏代码
  1. <mvc:annotation-driven>
  2. <mvc:message-convertersregister-defaults="true">
  3. <bean
  4. class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
  5. p:supportedMediaTypes="*/*"/>
  6. mvc:message-converters>
  7. mvc:annotation-driven>

4. 自定义

Html代码 收藏代码
  1. //配置BeanNameViewResolver
  2. <beanclass="org.springframework.web.servlet.view.BeanNameViewResolver">
  3. <propertyname="order"value="1"/>
  4. bean>
  5. <beanid="jsonView"class="test.TestJsonView"/>

Html代码 收藏代码
  1. //实现TestJsonView
  2. publicclassTestJsonViewextendsAbstractView{
  3. @Override
  4. protectedvoidrenderMergedOutputModel(Map<String,Object>model,HttpServletRequestrequest,
  5. HttpServletResponseresponse)throwsException{
  6. JsonBuilderjb=newJsonBuilder();
  7. PrintWriterout=response.getWriter();
  8. out.print(jb.encode(model));
  9. }
  10. }

Html代码 收藏代码
  1. //Controller中可以这样写:
  2. ModelAndViewmav=newModelAndView("jsonView");
  3. //mav.addObject...
  4. returnmav;



来源:http://yjflfliulei.iteye.com/blog/1755134

你可能感兴趣的:(spring MVC 3.1 注解:@ResponseBody 返回json数据)