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);
        }
    }
}
相关推荐
海狸老先生2 分钟前
Apache Tomcat样例目录session操纵漏洞解读
java·网络安全·tomcat
Jinkxs2 小时前
基础14-Java集合框架:掌握List、Set和Map的使用
java·list
码上暴富2 小时前
axios请求的取消
前端·javascript·vue.js
JefferyXZF2 小时前
Next.js 初识:从 React 到全栈开发的第一步(一)
前端·全栈·next.js
遗憾皆是温柔3 小时前
3.JVM,JRE和JDK的关系是什么
java·开发语言·jvm·面试
wb1893 小时前
服务器的Mysql 集群技术
linux·运维·服务器·数据库·笔记·mysql·云计算
洛可可白3 小时前
Spring Boot 应用结合 Knife4j 进行 API 分组授权管理配置
java·spring boot·后端
一只韩非子3 小时前
AI时代,程序员如何优雅地搞定页面设计?
前端·ai编程
新中地GIS开发老师3 小时前
2025Mapbox零基础入门教程(14)定位功能
前端·javascript·arcgis·gis·mapbox·gis开发·地理信息科学
tager3 小时前
Vue 3 组件开发中的"双脚本"困境
前端·vue.js·代码规范