spring mvc 返回json格式数据的方式主要有五种:
一、第一种方式使用JSON工具将对象序列化成json,常用工具Jackson,fastjson,gson。
利用HttpServletResponse,然后获取response.getOutputStream()或response.getWriter()直接输出。
二、使用Spring内置的支持,利用spring mvc3的注解@ResponseBody,然后使用spring mvc的默认配置就可以返回json了,不过需要jackson的jar包哦。
1. Spring MVC 配置
-
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
-
<property name="messageConverters">
-
<list>
-
<bean
-
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
-
</list>
-
</property>
-
</bean>
2. WEB-INF/lib 中添加
jackson-mapper-asl-1.6.4.jar
jackson-core-asl-1.6.4.jar
3. Controller 中 使用:@ResponseBody 标注方法,该方法返回 Java对象(支持复杂对象),MappingJacksonHttpMessageConverter 会将对象转换为 JSON 输出
例如:
-
@ResponseBody
-
@RequestMapping(\"/list\")
-
public List<String> list(ModelMap modelMap) {
-
String hql = \"select c from Clothing c \";
-
Page<Clothing> page = new Page<Clothing>();
-
page.setPageSize(6);
-
page = clothingServiceImpl.queryForPageByHql(page, hql);
-
-
return page.getResult();
-
}
三、spring2时代的产物,也就是每个json视图controller配置一个Jsonview。
如:<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
或者<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
同样要用jackson的jar包。
四、自定义
// 以下是实现方法,仅仅是个演示
// 配置 BeanNameViewResolver
-
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
-
<property name="order" value="1" />
-
</bean>
-
<bean id="jsonView" class="test.TestJsonView" />
// 实现 TestJsonView
-
public class TestJsonView extends AbstractView {
-
@Override
-
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
-
HttpServletResponse response) throws Exception {
-
JsonBuilder jb = new JsonBuilder();
-
PrintWriter out = response.getWriter();
-
out.print(jb.encode(model));
-
}
-
}
// 配置 View
-
<bean id="jsonView" class="test.TestJsonView" />
// Controller 中可以这样写
-
ModelAndView mav = new ModelAndView("jsonView");
-
// mav.addObject ...
-
return mav
五、 使用 spring-json.jar
// 就是第4种方法,但是强大的多。。。
注意:
-
第一步当然创建一个新项目,加入spring啦^-^ 貌似现在只有3.0版本以上才支持整合json哦。
-
在项目中加入两个json的jar包:jackson-core-asl-x.x.x.jar和jackson-mapper-asl.x.x.x.jar。其中xxx是jar包的版本,网上很多说用1.4.2,但是我加入1.4.2版本后,部署会出错。在请求中会出现ObjectMapper:NoClassDefFoundException的错,仔细查看原来tomcat启动的时候就错了,报的是isFullyTyped:NoSuchMethodError的错误。这个错真心纠结了很久,最后在官网上看到原来是core包里里面一个类没有这个方法。查看jar包,1.4.2真的没有这个方法。仔细查看官网API,尼玛json竟然不是向下兼容的,伤不起....最后看到了1.1版本还是支持的,于是就下载了1.1.2的版本。于是两个jar包就是:jackson-core-asl-1.1.2.jar和jackson-mapper-asl.1.1.2.jar。
阅读(655) | 评论(0) | 转发(0) |