在Javaweb中使用JSON数据格式发送以及响应

在传统的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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你回答这个问题。 首先,我们需要编写一个Java servlet处理请求。以下是一个基本的示例: ```java import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.gson.Gson; @WebServlet("/example") public class ExampleServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Create a Gson object to convert objects to JSON Gson gson = new Gson(); // Create an example object to send as JSON ExampleObject example = new ExampleObject(); example.setName("John"); example.setAge(30); // Convert the object to JSON String json = gson.toJson(example); // Set the response type to JSON response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); // Send the JSON as a response response.getWriter().write(json); } } ``` 在这个示例,我们创建了一个名为 "ExampleServlet" 的 servlet,并使用 `@WebServlet` 注解告诉容器该 servlet 映射到 `/example` 路径。我们定义了一个 `doGet` 方法以处理 GET 请求。在此方法,我们创建了一个示例对象(`ExampleObject`) 并将其转换为 JSON 字符串。然后,我们将响应类型设置为 JSON,并将 JSON 字符串发送回客户端。 接下来,我们将使用 JavaScript 发出异步 POST 请求并发送 JSON 对象。以下是一个示例 JavaScript 代码: ```javascript function sendRequest() { // Create the JSON object var obj = { name: "Jane", age: 25 } // Convert the JSON object to a string var json = JSON.stringify(obj); // Create a new XMLHttpRequest object var xhr = new XMLHttpRequest(); // Set up the request xhr.open("POST", "/example"); xhr.setRequestHeader("Content-Type", "application/json"); // Handle the response xhr.onload = function() { if (xhr.status === 200) { var response = JSON.parse(xhr.responseText); console.log(response); } }; // Send the request xhr.send(json); } ``` 在此示例,我们首先创建了一个名为 "obj" 的 JavaScript 对象,并将其值设置为我们要发送数据。然后,我们将此对象转换为 JSON 格式的字符串。接下来,我们创建了一个新的 XMLHttpRequest 对象,并使用 `xhr.open()` 方法设置请求的类型和 URL。要在请求发送 JSON 数据,我们需要设置 `Content-Type` 标头以指示数据类型为 JSON。最后,我们发送请求并处理响应。 希望这个回答能帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值