irpas技术客

在Javaweb中使用JSON数据格式发送以及响应_深夜无法入眠的程序猿

网络投稿 7353

在传统的Javaweb中数据发送以及响应的,我们通常使用servlet。随着技术的不断更新迭代,当我们使用axios发生json格式的数据时,我们后台之内使用json数据格式来进行响应。

1.如果我们在前端发送普通请求参数时,我们在后台还能使用servlet.getParameter方法接收

?前端使用VUE进行发送

new Vue({ "el":"#app", "data":{}, "methods":{ "commonParam":function () { axios({ "method":"post", "url":"/demo/AjaxServlet?method=commonParam", "params":{ "userName":"tom", "userPwd":"123456" } }).then(function (response) { console.log(response); }).catch(function (error) { console.log(error); }); } } });

后端接收的相关代码?

请求的URL为:http://localhost:8080/demo/AjaxServlet?method=commonParam&userName=tom&userPwd=123456

public class AjaxServlet extends ModelBaseServlet { protected void commonParam(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userName = request.getParameter("userName"); String userPwd = request.getParameter("userPwd"); System.out.println("userName = " + userName); System.out.println("userPwd = " + userPwd); response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("服务器端返回普通文本字符串作为响应"); } } 2.现在我们发送请求JSON数据时

前台相关代码

…… "methods":{ "requestBodyJSON":function () { axios({ "method":"post", "url":"/demo/AjaxServlet?method=requestBodyJSON", "data":{ "stuId": 55, "stuName": "tom", "subjectList": [ { "subjectName": "java", "subjectScore": 50.55 }, { "subjectName": "php", "subjectScore": 30.26 } ] } }).then(function (response) { console.log(response); }).catch(function (error) { console.log(error); }); } } ……

后端代码

1.加入Gson的jar包

Gson是Google研发的一款非常优秀的JSON数据解析和生成工具,它可以帮助我们将数据在JSON字符串和Java对象之间互相转换。

? //Gson有两个API ?//1.fromJson(string,T) 将字符串转化成java object ?//2.toJson(java Object) 将java object转化成json字符串,这样才能响应给客户端

protected void requestBodyJSON(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.由于请求体数据有可能很大,所以Servlet标准在设计API的时候要求我们通过输入流来读取 BufferedReader reader = request.getReader(); // 2.创建StringBuilder对象来累加存储从请求体中读取到的每一行 StringBuilder builder = new StringBuilder(); // 3.声明临时变量 String bufferStr = null; // 4.循环读取 while((bufferStr = reader.readLine()) != null) { builder.append(bufferStr); } // 5.关闭流 reader.close(); // 6.累加的结果就是整个请求体 String requestBody = builder.toString(); // 7.创建Gson对象用于解析JSON字符串 Gson gson = new Gson(); // 8.将JSON字符串还原为Java对象 Student student = gson.fromJson(requestBody, Student.class); System.out.println("student = " + student); System.out.println("requestBody = " + requestBody); response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("服务器端返回普通文本字符串作为响应"); } ?3.服务器端返回JSON数据

前端

axios({ "method":"post", "url":"/demo/AjaxServlet?method=responseBodyJSON" }).then(function (response) { console.log(response); }).catch(function (error) { console.log(error); });

后端

protected void responseBodyJSON(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.准备数据对象 Student student = new Student(); student.setStuId(10); student.setStuName("tom"); student.setSchool(new School(11,"atguigu")); student.setSubjectList(Arrays.asList(new Subject("java", 95.5), new Subject("php", 93.3))); Map<String, Teacher> teacherMap = new HashMap<>(); teacherMap.put("t1", new Teacher("lili", 25)); teacherMap.put("t2", new Teacher("mary", 26)); teacherMap.put("t3", new Teacher("katty", 27)); student.setTeacherMap(teacherMap); // 2.创建Gson对象 Gson gson = new Gson(); // 3.将Java对象转换为JSON对象 String json = gson.toJson(student); // 4.设置响应体的内容类型,MIME类型定义 response.setContentType("application/json;charset=UTF-8"); response.getWriter().write(json); }

?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Vue