Axios请求使用params参数导致后端获取数据嵌套

问题重述:

首先看前端的axios请求这里我使用params参数将data数据传给后端

html 复制代码
 let data = JSON.stringify(this.posts);
                axios.post("/blog_war_exploded/insertPost", {
                    params: {
                        data: data
                    }
                }).then((res) => {
                    if (res.data == "success") {
                        alert("发布成功")
                    } else alert("发布失败")

                });

后端我接受post请求的参数就需要使用流来读取这个我写的没有问题。但是发现对象可以打印出来,但是通过对象.属性名无法获取数据。

打印结果如下:(获取到的对象data被params包起来了导致无法获取title属性值)

解决方案有两种:

1:改写axios请求格式,不使用params参数,直接用**axios.post("url",data)**的方式传递参数

2:改写后端,先从 jsonObject 中获取 params 对象,再从 params 对象中解析出 data 字符串,再转换为 JSONObject,然后dataObject 中提取需要的字段。

java 复制代码
@WebServlet("/insertPost")
public class insertPost extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        JSONObject jsonObject = acceptPost(req);
        String title = jsonObject.getString("title");
      //获取其他参数、、、下面我将获取前端的对象打印了出来
        System.out.println("jsonObject = " + jsonObject);
        System.out.println("jsonObject.getString(\"title\") = " + jsonObject.getString("title"));
        GetMapper getMapper = new GetMapper();
        Integer posts = getMapper.insertPost(new posts(title, author, category, label, date, status, content));
        PrintWriter out = resp.getWriter();
        if (posts==1){
            out.write("success");
        }
    }
    /**
     * 接收并解析前端发送的POST请求的JSON数据
     *
     * @param req HttpServletRequest对象,用于获取请求数据
     * @return 解析后的JSONObject对象,包含前端发送的参数
     */
    public static JSONObject acceptPost(HttpServletRequest req) {
        try {
            // 创建BufferedReader对象,从请求输入流中读取数据
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(req.getInputStream(), "utf-8"));

            String data; // 用于临时存储每一行读取的数据
            StringBuilder stringBuilder = new StringBuilder(); // 用于存储整个请求的内容

            // 循环读取请求输入流中的数据,直到读完为止
            while ((data = bufferedReader.readLine()) != null) {
                stringBuilder.append(data);
            }

            // 将读取到的JSON字符串转换为JSONObject对象
            JSONObject jsonObject = JSONObject.parseObject(stringBuilder.toString());

            // 返回转换后的JSONObject对象
            return jsonObject;
        } catch (IOException e) {
            // 捕获IO异常并抛出运行时异常
            throw new RuntimeException(e);
        }
    }
}
相关推荐
MarcoPage几秒前
第十九课 Vue组件中的方法
前端·javascript·vue.js
.net开发2 分钟前
WPF怎么通过RestSharp向后端发请求
前端·c#·.net·wpf
tingting011922 分钟前
Linux 普通用户禁用sudo su - 命令
linux·运维·服务器
**之火23 分钟前
Web Components 是什么
前端·web components
顾菁寒24 分钟前
WEB第二次作业
前端·css·html
前端宝哥25 分钟前
10 个超赞的开发者工具,助你轻松提升效率
前端·程序员
斌斌_____25 分钟前
通过反射机制,比较两个对象的字段值的差异
java
WZF-Sang25 分钟前
Linux—进程学习-01
linux·服务器·数据库·学习·操作系统·vim·进程
你好龙卷风!!!26 分钟前
vue3 怎么判断数据列是否包某一列名
前端·javascript·vue.js
cooldream200929 分钟前
Spring Boot中集成MyBatis操作数据库详细教程
java·数据库·spring boot·mybatis