`
angelbill3
  • 浏览: 252480 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

【学习】spring MVC之返回JSON数据(Spring3.0 MVC+Jackson+AJAX)

 
阅读更多
本文本的框架为:SpringMVC 3.2.3 \ jackson 1.9.2

传统的返回JSON格式的AJAX,用的方法一般是:在后台先把数据(Object)封装成JSON数据,再用HttpServletResponse返回。

本示例中,SpringMVC可直接支持JSON格式数据的返回。具体如下。

1、JAR包:SPRINGMVC包需的包,另外还需JACKSON的两个包。
jackson-core-asl-1.9.2.jar
jackson-mapper-asl-1.9.2.jar

2、spring-servlet.xml中加入:
<!-- 返回JSON模版 --> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >  
    <property name="messageConverters">  
	<list>
	     <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
	</list> 
    </property>  
</bean>  

我们在SPRING的配置中加入了一个新的适配器:AnnotationMethodHandlerAdapter,通过这个适配器,我们配置了一个属性,messageConverters,其中mappingJacksonHttpMessageConverter这个Bean,它就是用来处理json数据转换的。
注:我的项目中没有乱码现象,这样配即可,若有乱码现象,可以在MappingJacksonHttpMessageConverter的BEAN中配置supportedMediaTypes属性,是用于解决返回的乱码问题。

3、Controller中的使用
@Controller
public class SelectController {
	@Resource
	private TypeService typeService;

	@RequestMapping("/type")
	@ResponseBody
	public Object type(){
		List<Type> typelist = this.typeService.getTypeByParentid(Const.TYPE_DAILY);
		return typelist;
	}
}

在SpringMVC中可以在Controller的某个方法上加@ResponseBody注解,表示该方法的返回结果直接写入HTTP response body中。

------------------------------------------
遇到的问题:

用上面的controller,访问:http://localhost:8080/demo/type.htm,报406错如下:
Failed to load resource: the server responded with a status of 406 (Not Acceptable) : The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers ()

查资料表明,不是JAR的版本问题,网友解答描述:

1、spring 3.2时requestedMediaTypes却为[text/html]的情况报406错误,还有一个原因可能是由于采用的后缀有关,如果使用*.htm,*.html等,默认就会采用[text/html]编码,若改成*.json,*.shtml等就OK

2、3.2.4 也遇到这个问题。修改ajax 请求的后缀为json 或者其他就可以了。他还是会优先根据url请求的后缀决定请求类型。所以你看到的一直是[text/html]

所以,将访问路径从http://localhost:8080/demo/type.htm改为http://localhost:8080/demo/type.json即可。
(如果你只拦截htm开头的链接,可以在web.xml里新增一个url-pattern为*.json的servlet即可。)



-----------------------------------------
参考:http://digdata.me/archives/96/
分享到:
评论
3 楼 cylboke 2016-12-11  
太给力了,搞了一下午,一直换jar版本,不起作用,用楼主的方法解决了,给力!!!!  
2 楼 vivian123an 2014-10-08  
给力啊!
1 楼 h121baby 2014-03-12  
very nice 多谢楼主

相关推荐

    SpringMVC环境下实现的Ajax异步请求JSON格式数据

    首先是常规的spring mvc环境搭建,不用多说,需要注意的是,这里需要引入jackson相关jar包,然后在spring配置文件“springmvc-servlet.xml”中添加json解析相关配置,我这里的完整代码如下: &lt;?xml version=1.0 ...

    springmvc-ajax

    这里使用了 jackson-databind 包, spring-mvc转json的包 &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt; &lt;artifactId&gt;jackson-databind &lt;version&gt;2.12.1 也配置了转成json解决乱码的问题 &lt;!-- 1、支持...

    jackson-all-1.8.5.jar

    在使用spring mvc时,ajax传输json格式的数据时,@ResponseBody, 会出现406错误,导入此包可解决,或者导入jackson-core-asl-1.9.13+jackson-mapper-asl-1.9.13jar

    jackson-core-asl-1.9.13.jar jackson-mapper-asl-1.9.13.ja

    jackson-core-asl-1.9.13.jar jackson-mapper-asl-1.9.13.ja spring mvc时,ajax传输json格式,@ResponseBody, 会出现错误,导入jackson-core-asl-1.9.13+jackson-mapper-asl-1.9.13jar

    jackson2.5.1

    Spring MVC 4.1+Mybatis ajax 异步返回Json 415问题解决方案 参考网址:http://blog.csdn.net/hao316068545/article/details/48109485

    spring security 参考手册中文版

    第七部分 Spring数据集成 273 38. Spring Data&Spring安全配置 273 39. @Query中的安全表达式 273 第八部分 附录 274 40.安全数据库模式 274 40.1用户模式 274 40.1.1集团当局 274 40.2持久登录(记得我)架构 275 ...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JEE:Java Enterprise Edition的示例

    杰 Java Enterprise Edition的示例 示例JEE:JSP,servlet,侦听器,过滤器,cookie,customTags,jstl。 ExampleMVC:模型视图控制器体系结构的示例 ... 它使用Javascript和Web服务全部安装在Spring-MVC中

Global site tag (gtag.js) - Google Analytics