• 关于SpringMVC Json使用


    很简单的一个东西,这里就不做过多介绍了,写一个小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</groupId>
     3             <artifactId>jackson-core-lgpl</artifactId>
     4             <version>1.8.1</version>
     5         </dependency>
     6 
     7         <dependency>
     8             <groupId>org.codehaus.jackson</groupId>
     9             <artifactId>jackson-mapper-lgpl</artifactId>
    10             <version>1.8.1</version>
    11         </dependency>

    当然也可以不使用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     <bean
     6         class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
     7         <property name="messageConverters">
     8             <list>
     9                 <bean
    10                     class="org.springframework.http.converter.StringHttpMessageConverter">
    11                     <property name="supportedMediaTypes">
    12                         <list>
    13                          <!-- 默认是ISO-88859-1,避免乱码这里设置为UTF-8 -->
    14                             <value>
    15                                 text/html;charset=UTF-8
    16                             </value>
    17                         </list>
    18                     </property>
    19                 </bean>
    20                 <!-- 启动JSON格式的配置 -->
    21                 <bean id="jacksonMessageConverter"
    22                     class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    23                     <!-- 解决 HttpMediaTypeNotAcceptableException: Could not find acceptable 
    24                         representation -->
    25                     <property name="supportedMediaTypes">
    26                         <list>
    27                             <value>application/json;charset=UTF-8</value>
    28                         </list>
    29                     </property>
    30                 </bean>
    31             </list>
    32         </property>
    33     </bean>

    有了以上的配置之后,我们只需要在对应处理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" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%
     4     String path = request.getContextPath();
     5     String basePath = request.getScheme() + "://"
     6             + request.getServerName() + ":" + request.getServerPort()
     7             + path + "/";
     8 %>
     9 <html>
    10 <head>
    11     <script type="text/javascript" src="<%=basePath %>js/jquery-1.4.4.min.js"></script>
    12     <script type="text/javascript">
    13         $(document).ready(function(){
    14             $("#send").click(function(){
    15                     $.ajax({
    16                         type:"get",
    17                         url:"<%=basePath %>userController/showUser?json",
    18                         dataType:" json",
    19                         success:function(data){    
    20                             alert(data);
    21                         }
    22                     });
    23             });
    24         });
    25     </script>
    26 </head>
    27 <body>
    28 <h3>点击下面按钮,输出Json信息</h3>
    29 <input type="button" id="send" name="send" value="获取json信息">
    30 </body>
    31 </html>

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

     1     <!-- SpringMVC配置 -->
     2     <servlet>
     3         <servlet-name>springDispatcherServlet</servlet-name>
     4         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     5         <init-param>
     6             <param-name>contextConfigLocation</param-name>
     7             <param-value>classpath:springmvc.xml</param-value>
     8         </init-param>
     9         <load-on-startup>1</load-on-startup>
    10     </servlet>
    11 
    12     <servlet-mapping>
    13         <servlet-name>springDispatcherServlet</servlet-name>
    14         <url-pattern>/</url-pattern>
    15     </servlet-mapping>

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

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

    这里顺带说下解决方法:

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

     1 <servlet-mapping>
     2     <servlet-name>default</servlet-name>
     3     <url-pattern>*.jpg</url-pattern>
     4 </servlet-mapping>
     5 <servlet-mapping>
     6     <servlet-name>default</servlet-name>
     7     <url-pattern>*.js</url-pattern>
     8 </servlet-mapping>
     9 <servlet-mapping>
    10     <servlet-name>default</servlet-name>
    11     <url-pattern>*.css</url-pattern>
    12 </servlet-mapping>  

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

    看下实现效果:

  • 相关阅读:
    虚拟机docker开启服务,本地无法进行访问
    make编译提示:make cc Command not found 解决办法
    yum -y install git 无法安装...提示There are no enabled repos.
    linux 安装mysql
    linux 配置环境变量
    HTML5第三天 无序有序列表、相对绝对路径
    JavaScript第一天
    HTML第二天
    mysql流程控制语句
    mysql存储过程和函数
  • 原文地址:https://www.cnblogs.com/lichenwei/p/4166640.html
Copyright © 2020-2023  润新知