关于SpringMVC Json使用 Gson简要使用笔记

很简单的一个东西,这里就不做过多介绍了,写一个小Demo,随手记录下。

 

首先,在搭好SpringMVC工程环境之后,如果想用Spring自带的Json,需要额外的添加2个JAR包:

1、jackson-core-asl-1.9.9.jar

2、jackson-mapper-asl-1.9.9.jar

我这里使用的是Maven,也相对应的给出pox.xml

 1         <dependency>
 2             groupId>org.codehaus.jackson</ 3             artifactId>jackson-core-lgpl 4             version>1.8.1 5          6 
 7          8              9             >jackson-mapper-lgpl10             11         >

当然也可以不使用Spring自带的Json,还有很多第三方的Json支持包,比如谷歌的Gson,都是很好用的东西。

关于Gson的使用,之前的文章里也有做介绍,请戳:《Gson简要使用笔记http://www.cnblogs.com/lichenwei/p/3987429.html

 

好了,进入正题,要使用Spring自带的Json,需要在SpringMVC配置文件里做一些配置:

 1     <!-- 处理在类级别上的@RequestMapping注解 -->
 2     bean
 3         class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
 4      处理在方法级别上的@RequestMapping注解  5      6         ="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"property name="messageConverters"list 9                 10                     ="org.springframework.http.converter.StringHttpMessageConverter"11                     ="supportedMediaTypes"12                         13                           默认是ISO-88859-1,避免乱码这里设置为UTF-8 14                             value15                                 text/html;charset=UTF-8
16                             17                         18                     property19                 bean20                  启动JSON格式的配置 21                 bean id="jacksonMessageConverter"
22                     class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"23                      解决 HttpMediaTypeNotAcceptableException: Could not find acceptable 
24                         representation 25                     26                         27                             >application/json;charset=UTF-828                         29                     30                 31             32         33     >

 

有了以上的配置之后,我们只需要在对应处理AJAX请求的方法上加上注解@ResponseBody,这样Spring就会帮我们把内容或对象作为HTTP响应的正文返回,会跳过视图处理部分,而调用适合HttpMessageConverter,将返回值(对象、字符串、List集合等)写入输出流。

 

SpringMVC的用法这里就不再多说了,直接给出关键代码:

    //向页面直接输出Json字符串
    @ResponseBody
    @RequestMapping(value="/showUser",params="json",produces="application/json")
    public User showUserJson(){
        User user=userService.getUserById(1);获取数据库的一条信息
        return user;
    }

@RequestMapping

value:     指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

params: 指定request中必须包含某些参数值,才让该方法处理。

 

看一下页面输出:

怎么样?相比Struts2输出Json要简单的多吧,少去了很多配置和通配符的设定。

 

再来看一下和AJAX的配合使用,服务端的代码依旧如上,然后我们写一个JSP页面进行测试

 1 <%@ page language="java contentTypetext/html; charset=UTF-8"
 2     pageEncodingUTF-8"%>
 3 <%
 4     String path  request.getContextPath();
 5      basePath  request.getScheme() + :// 6             + request.getServerName() :"  request.getServerPort()
 7             /;
 8  9 html10 head11     script type="text/javascript" src="<%=basePath %>js/jquery-1.4.4.min.js"></script12     ="text/javascript"13         $(document).ready(function(){
14             $(#send).click(15                     $.ajax({
16                         type:get,17                         url:<%=basePath %>userController/showUser?json18                         dataType: json19                         success:(data){    
20                             alert(data);
21                         }
22                     });
23             });
24         });
25     26 27 body28 h3>点击下面按钮,输出Json信息29 input ="button" id="send" name value="获取json信息"30 31 >

这里要提到一个注意事项,我们在整合SpringMVC的时候需要在web.xml进行对DispatcherServlet的配置

 SpringMVC配置 servlet 3         servlet-name>springDispatcherServlet 4         servlet-class>org.springframework.web.servlet.DispatcherServletinit-param 6             param-name>contextConfigLocation 7             param-value>classpath:springmvc.xml 8          9         load-on-startup>110     11 
servlet-mapping13         14         url-pattern>/15     >

如果你配置DispatcherServlet拦截*.do就不会存在静态资源访问的问题,

但如果你和我一样配置DispatcherServlet拦截 / (所有),那么对*.js,*.css,*.jpg等资源的访问也就被拦截了,也就访问不到了。

这里顺带说下解决方法:

激活Tomcat的defaultServlet来处理静态文件 

 1 >default 3     >*.jpg 4  5  6      7     >*.js 8 >*.css12 >  

每种文件类型都要配置,要写在DispatcherServlet的前面, 让defaultServlet先拦截,这个就不会进入Spring了。

 

看下实现效果:

 

相关文章

开发过程中是不可避免地会出现各种异常情况的,例如网络连接...
说明:使用注解方式实现AOP切面。 什么是AOP? 面向切面编程...
Spring MVC中的拦截器是一种可以在请求处理过程中对请求进行...
在 JavaWeb 中,共享域指的是在 Servlet 中存储数据,以便在...
文件上传 说明: 使用maven构建web工程。 使用Thymeleaf技术...
创建初始化类,替换web.xml 在Servlet3.0环境中,Web容器(To...