今天做练习需要异步交互通过springmvc向前台返回json格式数据通过js接受数据,但前台js接受数据时总是报错。
根据以前看别人的博客上只说配置@responseBody注解就可以了,但是这一次怎么都不行,我就想是不是环境没有配置,之后一搜果然这样,现在我就把我查看的博客分享一下:
Spring MVC 3.0 返回JSON数据的几种方法:
1. 直接 PrintWriter 输出
2. 使用 JSP 视图
3. 使用Spring内置的支持
// 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>
// WEB-INF/lib 中添加jackson-mapper-asl-1.6.4.jar
jackson-core-asl-1.6.4.jar
// Controller 中 使用:@ResponseBody 标注方法,该方法返回 Java对象(支持复杂对象),MappingJacksonHttpMessageConverter 会将对象转换为 JSON 输出
4. 自定义
// 以下是实现方法,仅仅是个演示
// 配置 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;
5. 使用 spring-json.jar
// 就是第4种方法,但是强大的多。。