zoukankan      html  css  js  c++  java
  • SpringMVC之JSON交互

    #什么是json?

          json是一种用于储存数据格式或是数据传输方式,是js脚本语言的子集。

    #json的作用?

         它传递对象、数组等数据结构。如果是单个数据,则要用数组,不用对象,因为对象是键值对方式去存储,其形式为“名称:值”的形式,名称必须为字符串类型,而可以为任意类型

         json是用于数据交换的,浏览器与控制器之间进行数据交换,Spring提供了一个接口来完成该工作,并用该接口的实现类来完成操作,该实现类要用jackson开源包(在Maven仓库中找到相关依赖,然后在pom.xml中下载相关的数据)来读写数据,并将java对象转换为json对象或xml文档,也可以将json对象和xml文档转换为java对象。(java对象<----->json对象或xml文档进行转换)

    #json与xml区别?

          都是数据传输方式,但相比之下,json占内存小,且解析速度快

    -------------------------------------------------------------------------------------

    #操作

    1).添加相关Spring包,另外,在http://mvnrepository.com/artifact/com.fasterxml.jackson.core下载fastjson包,其实在github上有相关代码备份;从经验上来看最好用阿里的fastjson,用json包有时会出现版本冲突;

    相关的pom.xml依赖入下:

    <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>4.3.4.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.24</version>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
        <dependency>
          <groupId>taglibs</groupId>
          <artifactId>standard</artifactId>
          <version>1.1.2</version>
        </dependency>
      </dependencies>

    2).在web.xml中配置前端控制器和Spring-config.xml的路径,并添加静态资源文件的配置,因web.xml没有设置对相关请求的拦截,需要在Spring-config.mvc中添加<mvc:resources location="" mapper="">,这里首先要引入jq库;

    3).在Spring-config.xml中,添加额外如下配置

     <mvc:annotation-driven>
        <!--配置@ResponseBody由fastjson解析-->
            <mvc:message-converters>
                <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"/>
            </mvc:message-converters>
        </mvc:annotation-driven>
        <mvc:default-servlet-handler />
    
        <!-- 支持mvc注解驱动 -->
        <!--
    在spring中一般采用@RequestMapping注解来完成映射关系, 要想使@RequestMapping注解生效必须向上下文中注册
    DefaultAnnotationHandlerMapping
    和一个AnnotationMethodHandlerAdapter 实例,这两个实例分别在类级别和方法级别处理。而annotation-driven配置帮助
    我们自动完成上述两个实例的注入。
    --> <mvc:resources location="/js/" mapping="/js/**"/>

           

    4).根据表单写javaBean;

         

    5).写jsp页面,这里面涉及到ajax     

     1 <%--
     2   Created by IntelliJ IDEA.
     3   User: shijinglu
     4   Date: 2019/2/1
     5   Time: 20:21
     6   To change this template use File | Settings | File Templates.
     7 --%>
     8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
     9 <html>
    10 <head>
    11     <title>测试JSON交互</title>
    12 
    13     <!--引入js文件,引入路径 从当前项目的js文件夹下的jquery-1.11.3.min.js-->
    14     <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.11.3.min.js">
    15     </script>
    16     <!--写一个function testJson()-->
    17     <script type="text/javascript">
    18         function testJson() {
    19             <!--获取用户输入的用户名和密码-->
    20             var username=$("#username").val();
    21             var password=$("#password").val();
    22             <!--发一个ajax请求-->
    23             $.ajax({
    24                 <!--testJson路径  默认是当前页的地址,这里是交给testJson处理-->
    25                 url:"${pageContext.request.contextPath}/testJson",
    26                 type:"post",
    27                 <!--把发送过来的数据转换成json字符串-->
    28                 data:JSON.stringify({username:username,password:password}),
    29                 <!--请求类型设置为json字符串,并设置字符集为utf-8-->
    30                 contentType: "application/json;charset=UTF-8",
    31                 <!--定义回调的响应格式为json字符串,该属性可以省略-->
    32                 dataType:"json",
    33                 success : function(data) {
    34                     if(data !=null){
    35                         alert("您输入的用户名为:"+data.username+"密码为:"+data.password);
    36                     }
    37                 }
    38             });
    39 
    40         }
    41     </script>
    42 </head>
    43 <body>
    44 <form>
    45     用户名:<input  name="username" id="username"><br/>    <!--name后面的值必须与pojo里面封装的值一致,否则读取的值是空值-->
    46     密&nbsp;&nbsp;&nbsp;码:<input type="password" name="password" id="password"><br/>
    47     <input type="button" value="测试json交互" onclick="testJson()">
    48 </form>
    49 </body>
    50 </html>

         

    6).写控制器;

    @Controller  //表示控制器  等价于在配置文件里面写<bean id="" class="">
    public class UserController{
    
         /**
          * 接收页面请求的数据,并以json格式返回数据
          * */
         @RequestMapping(value="/testJson",method = RequestMethod.POST,consumes = "application/json")
         //@ReponseBody:是把user对象转换为json,因为响应端的浏览器不认识java对象,但认识js对象标记。
        @ResponseBody
         //@RequestBody:把请求的json字符串(data后面的内容)转换成user对象
        public User testJson(@RequestBody User user){
             System.out.println(user);
             //并返回json格式
             return user;
         }
    }
     

    原理待补充

    成年人的世界没有那么多的童话,也没有那么多的逆袭。
  • 相关阅读:
    sql脚本:将一个数据库完整复制到另一个数据库(转)
    问题:DropDownList启用AutoPostback后,SelectedIndexChanged事件跟踪不到
    学习:如何在已有MOSS的环境下重装IIS(转)
    学习:MOSS2007 实现单点登陆(转)
    sql脚本:恢复数据库(根据备份的bak)(转)
    学习:深入浅出之正则表达式(转)
    错误:此网页的安全性验证无效并且可能损坏。请单击 Web 浏览器中的“后退”,刷新网页,再重试操作
    学习:关于代码调用SSP获取UserProfile出错的解决方案(转)
    问题:提升权限后,更新SPListItem即 Item.Update()出错问题
    学习:char、varchar、text和nchar、nvarchar、ntext的区别(转)
  • 原文地址:https://www.cnblogs.com/shijinglu2018/p/10349401.html
Copyright © 2011-2022 走看看