05json交互

2019-08-05  本文已影响0人  RobertLiu123

第1-2节
JSON.parse()【从一个字符串中解析出json对象】
JSON.stringify()【从一个对象中解析出字符串】
json交互
json形式
1、json对象

{key1:value1,key2:value2}

2、json数组

[{key1:value1,key2:value2},{key1:value1,key2:value2},{key1:value1,key2:value2}]

准备工作
引jar,相关的pom描述:

   <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.8.8</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.8</version>
    </dependency>

模拟正式开发-开发准备
1)有一个java类,tabclass,想要对他进行操作

public class TabClass {
    private int classId;
    private String className;
......
}

如果是请求添加,应该收到classid,classname.给用户返回处理结果。我拼装一个返回对象(返回码和描述)
0 -成功
999-未知异常
-1 -失败
2)操作返回对象

public class ResultMsg {
   private int resultCode;
   private String errorMsg;
。。。。。。
}

3)src/main/webapp下新建js包,将jquery-1.11.2.min.js拷贝进来
请求是key-value,响应json
addclass.jsp增加以下代码,利用form表单序列化功能

 <input type="button" id="btn2" value="请求kv,响应json"/>
 $("#btn2").bind("click",function(){
       $.ajax({
           type: "POST",
           url: "<%=request.getContextPath()%>/json/addkv.action",
          data:$("#form1").serialize(),
           success: function(msg){
             alert( "返回码: " + msg.resultCode );
           }
        });
   })

后台controller

@RequestMapping("/addkv")
public @ResponseBody ResultMsg addkv(TabClass tabClass) {
    ResultMsg rm = new ResultMsg();
    rm.setResultCode(0);
    rm.setErrorMsg("添加成功");
    return rm;
}

第2节 学生练习上面的程序
第3节 请求响应都是json
后台关键点:@RequestBody @ResponseBody
@RequestBody 用户前台输入json形式------->后台自动转换成java对象形式
@ResponseBody 后台java代码返回对象形式---->自动给前台转换成json形式
代码需要变动的:除了需要加注解,其他的不用动。
1)新建addclass.jsp,并发送json形式的请求。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="<%=request.getContextPath()%>/js/jquery-1.11.2.min.js"></script>
<script src="<%=request.getContextPath()%>/js/myjquery.js"></script>
<script>
   $(function(){
       //为btn1绑定单击事件
       $("#btn1").bind("click",function(){
          // var id=$("#classId").val();
           //var name=$("#className").val();
         //发送ajax请求,请求后台进行添加 
           $.ajax({
               type: "POST",
               contentType:"application/json",//传递json时必填
               url: "<%=request.getContextPath()%>/tclass/add2.action",
               /* data: '{"classId":'+id+',"className":'+name+'}', */
               /*JSON.stringify 把对象序列化成字符串
               serializeObject是把form序列化成对象*/
               data:JSON.stringify($("#form1").serializeObject()),
               success: function(msg){
             alert( "返回码: " + msg.resultCode );
               }
            });
           
       })
       
   })
</script>
</head>
<body>
<form id="form1" method="post">
   编号: <input type="text" name="classId" id="classId"/><br>
  名称: <input type="text" name="className" id="className" /><br>
  <input type="button" id="btn1" value="来去都json"/>
</form>
</body>
</html>

2)其中的myjquery.js用于将form序列化成对象

jQuery.prototype.serializeObject=function(){  
    var obj=new Object();  
    $.each(this.serializeArray(),function(index,param){  
        if(!(param.name in obj)){  
            obj[param.name]=param.value;  
        }  
    });  
    return obj;  
};

3)后台controller

@Controller
@RequestMapping("/tclass")
public class JsonController {
    /*
     * 收发都json
     */
    @ResponseBody
    @RequestMapping("/add2")
   public ResultMsg add(@RequestBody TabClass tabClass){
        ResultMsg rm=new ResultMsg();
        rm.setResultCode(0);
        rm.setErrorMsg("添加成功");
    return rm;
   }
}
上一篇 下一篇

猜你喜欢

热点阅读