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);
        }
    }
}
相关推荐
宋辰月8 小时前
学习react第三天
前端·学习·react.js
bug总结8 小时前
更新原生小程序封装(新增缓存订阅)完美解决
前端·缓存·小程序
bemyrunningdog8 小时前
IntelliJ IDEA导出WAR包全指南
java·ide·intellij-idea
虫师c8 小时前
List vs Set:深入剖析Java两大集合的核心区别与实战应用
java·数据结构·list·set·java集合
emiya_saber8 小时前
Linux 硬盘分区管理
java·linux·网络
5335ld8 小时前
后端给的post 方法但是要求传表单数据格式(没有{})
开发语言·前端·javascript·vue.js·ecmascript
量子炒饭大师8 小时前
【一天一个计算机知识】—— 【编程百度】预处理指令
java·开发语言
二川bro8 小时前
第33节:程序化生成与无限地形算法
前端·算法·3d·threejs
q***51899 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
QDKuz9 小时前
掌握Vue2转Vue3, Options API 转 Composition API
前端·javascript·vue.js