pring mvc如何返回json 数据的,大概有如下几种:
Spring MVC 3.0 返回JSON数据的方法
1. 直接 PrintWriter 输出
2. 使用 JSP 视图
3. 使用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之后使用RequestMappingHandlerMapping和RequestMappingHandlerAdapter
替代了原有的DefaultMethodHandlerMapping和AnnotationMethodHandlerAdapter,
所以,3.1的返回json配置可以使用如下配置:
- <bean
- class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
- p:ignoreDefaultModelOnRedirect="true">
- <propertyname="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对象(支持复杂对象),
如:
- public@ResponseBodyUsergetUser(Useru){
- returnu;
- }
MappingJacksonHttpMessageConverter 会将对象转换为 JSON 输出
注意:当springMVC-servlet.xml中使用<mvc:annotation-driven />时,如果是3.1之前已经默认注入AnnotationMethodHandlerAdapter,3.1之后默认注入RequestMappingHandlerAdapter只需加上上面提及的jar包即可!
注意:默认情况下MappingJacksonHttpMessageConverter 会设置content为application/json,在IE9下返回会出现提示下载的现象,出现这种情况可以手动指定头信息为"text/html",或者"*/*"(所有,不确定就设这个)
如果是手动注入RequestMappingHandlerAdapter 可以这样设置
- <bean
- class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
- p:ignoreDefaultModelOnRedirect="true">
- <propertyname="messageConverters">
- <list>
- <bean
- class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
- p:supportedMediaTypes="*/*"/>
- </list>
- </property>
- </bean>
如果是采用mvc:annotation-driven标签 可以这样注入信息
- <mvc:annotation-driven>
- <mvc:message-convertersregister-defaults="true">
- <bean
- class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
- p:supportedMediaTypes="*/*"/>
- </mvc:message-converters>
- </mvc:annotation-driven>
4. 自定义
- //配置BeanNameViewResolver
- <beanclass="org.springframework.web.servlet.view.BeanNameViewResolver">
- <propertyname="order"value="1"/>
- </bean>
- <beanid="jsonView"class="test.TestJsonView"/>
- //实现TestJsonView
- publicclassTestJsonViewextendsAbstractView{
- @Override
- protectedvoidrenderMergedOutputModel(Map<String,Object>model,HttpServletRequestrequest,
- HttpServletResponseresponse)throwsException{
- JsonBuilderjb=newJsonBuilder();
- PrintWriterout=response.getWriter();
- out.print(jb.encode(model));
- }
- }
- //Controller中可以这样写:
- ModelAndViewmav=newModelAndView("jsonView");
- //mav.addObject...
- returnmav;
来源:http://yjflfliulei.iteye.com/blog/1755134