# Axious發送json格式數據與服務器端響應 ###### tags: `Java Web-vue` ### - 什么是JSON #### JSON是一种数据格式 #### XML也是一种数据格式 XML格式表示两个学员信息的代码如下: ``` <students> <student sid="s001"> <sname>jim</sname> <age>18</age> </student> <student sid="s002"> <sname>tom</sname> <age>19</age> </student> </students> ``` JSON格式表示两个学员信息的代码如下: ``` [{sid:"s001",age:18},{sid:"s002",age:19}] ``` - JSON表达数据更简洁,更能够节约网络带宽 - 客户端发送JSON格式的数据给服务器端 #### axious寫法 ##### 1)客戶端的params需要修改成data ```htmlembedded= var vue = new Vue({ "el":"#div0", data:{ uname:"lina", pwd:"ok" }, methods:{ axios02:function(){ axios({ method:"POST", url:"axios02.do", data:{ uname:vue.uname, pwd:vue.pwd } }) .then(function (value) { console.log(value); }) .catch(function (reason) { console.log(reason); }); } } }); ``` #### java內部寫法 ##### 2)服務器獲取參數值不再是request.getParameter()... ##### 而是 ``` StringBuffer stringBuffer = new StringBuffer(""); BufferedReader bufferedReader = request.getReader(); String str = null ; while((str=bufferedReader.readLine())!=null){ stringBuffer.append(str); } str = stringBuffer.toString() ; ``` ```java= @WebServlet("/axios02.do") public class Axios02Servlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 2.创建StringBuilder对象来累加存储从请求体中读取到的每一行 StringBuffer stringBuffer = new StringBuffer(""); // 1.由于请求体数据有可能很大,所以Servlet标准在设计API的时候要求我们通过输入流来读取 BufferedReader bufferedReader = request.getReader(); // 3.声明临时变量 String str = null ; // 4.循环读取 while((str=bufferedReader.readLine())!=null){ stringBuffer.append(str); } // 5.关闭流 bufferedReader.close(); // 6.累加的结果就是整个请求体 str = stringBuffer.toString() ; //已知 String //需要转化成 Java Object // 7.创建Gson对象用于解析JSON字符串 Gson gson = new Gson(); //Gson有两个API //1.fromJson(string,T) 将字符串转化成java object //2.toJson(java Object) 将java object转化成json字符串,这样才能响应给客户端 // 8.将JSON字符串还原为Java对象 User user = gson.fromJson(str, User.class); System.out.println(user); } } ``` ##### 3) 我们会发现 str的内容如下: {"uname":"lina","pwd":"ok"} ************** ### 演示Axios发送异步请求给服务器端,服务器响应json格式的数据给客户端 #### java代碼 服务器端给客户端响应JSON格式的字符串,然后客户端需要将字符串转化成js Object ```java= @WebServlet("/axios03.do") public class Axios03Servlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { StringBuffer stringBuffer = new StringBuffer(""); BufferedReader bufferedReader = request.getReader(); String str = null ; while((str=bufferedReader.readLine())!=null){ stringBuffer.append(str); } str = stringBuffer.toString() ; //已知 String //需要转化成 Java Object Gson gson = new Gson(); //Gson有两个API //1.fromJson(string,T) 将字符串转化成java object //2.toJson(java Object) 将java object转化成json字符串,这样才能响应给客户端 User user = gson.fromJson(str, User.class); user.setUname("鸠摩智"); user.setPwd("123456"); //假设user是从数据库查询出来的,现在需要将其转化成json格式的字符串,然后响应给客户端 String userJsonStr = gson.toJson(user); response.setCharacterEncoding("UTF-8"); //MIME-TYPE response.setContentType("application/json;charset=utf-8"); response.getWriter().write(userJsonStr); } } ``` #### html ```htmlembedded= var vue = new Vue({ "el":"#div0", data:{ uname:"lina", pwd:"ok" }, methods:{ axios03:function(){ axios({ method:"POST", url:"axios03.do", data:{ uname:vue.uname, pwd:vue.pwd } }) .then(function (value) { var data = value.data; // data对应的数据: // {uname:"鸠摩智",pwd:"ok"} vue.uname=data.uname; vue.pwd=data.pwd; //此处value中的data返回的是 js object,因此可以直接点出属性 //如果我们获取的是一个字符串: "{uname:\"鸠摩智\",pwd:\"ok\"}" //js语言中 也有字符串和js对象之间互转的API //string JSON.stringify(object) object->string //object JSON.parse(string) string->object }) .catch(function (reason) { console.log(reason); }); } } }); ```