HTTP 请求 400错误

问题

HTTP 请求 400错误

详细问题

客户端发送请求

public static UserInfo updateUserInfo(UserInfo userInfo) {// 创建 OkHttpClient 对象OkHttpClient client = new OkHttpClient();// 创建请求体MediaType JSON = MediaType.parse("application/json; charset=utf-8");RequestBody requestBody = RequestBody.create(JSON,"{\"id\": " + userInfo.getId() +", \"avatarBase64\"" + userInfo.getAvatarBase64() + "\"" +", \"nickname\": \"" + userInfo.getNickname() + "\"" +", \"bio\": \"" + userInfo.getBio() + "\"" +", \"birthday\": \"" + userInfo.getBirthday() + "\"}");// 创建请求对象Request request = new Request.Builder().url("http://192.168.43.127:9090/user_info/update_user_info_by_id").post(requestBody).build();// 发送请求并处理响应client.newCall(request).enqueue(new Callback() {@Overridepublic void onResponse(Call call, Response response) throws IOException {// 处理响应,这里根据具体情况处理更新成功或失败的逻辑String responseData = response.body().string();// 在这里处理服务器返回的数据System.out.println("responseData" + responseData);}@Overridepublic void onFailure(Call call, IOException e) {// 处理请求失败的情况e.printStackTrace();}});return userInfo;
}

服务端接收请求

@PostMapping("/update_user_info_by_id")
public int updateUserInfo(@RequestBody UserInfo userInfo) {return userInfoService.updateUserInfo(userInfo);
}

客户端控制台打印

2024-02-17 13:45:21.584 27938-28019/com.example.assistingagriculture I/System.out: responseData{"timestamp":"2024-02-17T05:45:22.846+00:00","status":400,"error":"Bad Request","path":"/user_info/update_user_info_by_id"}

服务端控制台打印

2024-02-17 13:45:22.841  WARN 26516 --- [nio-9090-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected character ('1' (code 49)): was expecting a colon to separate field name and value; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('1' (code 49)): was expecting a colon to separate field name and value<EOL> at [Source: (PushbackInputStream); line: 1, column: 27]]

解决方案

\"avatarBase64\""修改为\"avatarBase64\": \""
即修改请求体:

RequestBody requestBody = RequestBody.create(JSON,"{\"id\": " + userInfo.getId() +", \"avatarBase64\"" + userInfo.getAvatarBase64() + "\"" +", \"nickname\": \"" + userInfo.getNickname() + "\"" +", \"bio\": \"" + userInfo.getBio() + "\"" +", \"birthday\": \"" + userInfo.getBirthday() + "\"}");

RequestBody requestBody = RequestBody.create(JSON,"{\"id\": " + userInfo.getId() +", \"avatarBase64\": \"" + userInfo.getAvatarBase64() + "\"" +", \"nickname\": \"" + userInfo.getNickname() + "\"" +", \"bio\": \"" + userInfo.getBio() + "\"" +", \"birthday\": \"" + userInfo.getBirthday() + "\"}");

产生原因

产生这个问题的原因是客户端发送的 JSON 请求体格式不正确,导致服务端无法解析请求。具体地说,在客户端构建请求体时,键值对之间缺少了冒号(😃,导致 JSON 解析错误。

解决原因

解决方案中提到的修改请求体的方式即是在键值对之间添加了缺失的冒号,使得 JSON 格式符合标准,从而能够被服务端正确解析。

总结

这种问题通常是由于客户端在构建请求参数时出现了格式错误或者遗漏导致的。在处理类似问题时,需要仔细检查请求体的构建过程,确保 JSON 格式的正确性。

参考文献

产生原因与解释原因部分 部分内容参考chatgpt

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/474118.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

- 项目落地 - 《选择项目工具的方法论》

本文属于专栏《构建工业级QPS百万级服务》 提纲&#xff1a; 选择大概率能完成业务目标的工具选择最适合的工具制作最适合的工具 本文所说的项目工具&#xff0c;泛指业务软件开发&#xff0c;所依赖的第三方提供的成熟的资源。包括但不限于开发语言、编辑工具、编译工具、三方…

python in Vscode

背景 对于后端的语言选择&#xff1a; python&#xff0c;java&#xff0c;JavaScript备选。 选择Python 原因&#xff1a;可能是非IT专业的人中&#xff0c;会Python的人比较多。 目的 之前使用的IDE是VSCODE&#xff0c;在WSL的环境下使用。现在需要在在WSL的VSCODE下使…

数据集合

目录 并集 union union all 区别 交集 intersect 差集 minus 错误操作 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 常用的数学集合有&#xff1a;交集、并集、差集、补集 每一次查询实际上都会返回数据集合&#xff0c;…

51单片机编程应用(C语言):DS1302实时时钟

单片机计时的缺陷&#xff1a; 1.他的精度不高&#xff0c;没有时钟芯片精度高&#xff0c; 2.会占用单片机CPU的时间&#xff0c; 3.单片机的时钟无法掉电继续运行&#xff0c;&#xff08;最大的缺点&#xff09; DS1302芯片内部有备用电池&#xff0c;可以掉电继续计时…

算法刷题:长度最小的子数组

长度最小的子数组 .题目链接题目详情算法原理滑动窗口定义指针进窗口判断出窗口 我的答案 . 题目链接 长度最小的子数组 题目详情 算法原理 滑动窗口 这道题,我们采用滑动窗口的思想来解决,具体步骤如图所示 定义指针 如图所示,两个指针都需要从左往右进行遍历,因此初始值…

为何重复造轮子

重复造轮子&#xff0c;意思是说&#xff0c;一个项目本身存在开源组件&#xff0c;但开发团队还是选择重新手写一套组件库或框架的情况&#xff0c;这在软件业界比比皆是。 下面说下游戏项目里重复造轮子的几点原因。 一&#xff0c;精简化 一般开源项目为了适应多场景多业…

永久禁止windows自动更新方法

文章目录 前言一、打开本地组策略编辑器二、禁用windows更新总结 前言 每次打开电脑&#xff0c;右下角就会弹出设备更新提示&#xff0c;看着令人烦恼&#xff0c;并且更新可能导致电脑设置发生改变甚至是卡顿&#xff0c;所以为了自己方便于是出了禁用电脑更新的办法&#x…

阿里云ECS香港服务器性能强大_安全可靠香港免备案服务器

阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品&#xff0c;中国电信CN2高速网络高质量、大规格BGP带宽&#xff0c;运营商精品公网直连中国内地&#xff0c;时延更低&#xff0c;优化海外回中国内地流量的公网线路&#xff0c;可以提高国际业务访问质量。阿里云服务…

VMware Workstation下载安装

一、VMware Workstation的简介 VMware Workstation是一种虚拟化软件&#xff0c;允许用户在单台PC上创建和运行多个虚拟机。它支持不同操作系统的同时运行&#xff0c;提供灵活的网络配置和资源管理&#xff0c;方便开发、测试和部署应用程序&#xff0c;提高工作效率和资源利用…

安卓实现简单砸地鼠游戏

效果 布局 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"a…

代码随想录day24--回溯的应用3

LeetCode93.修复IP地址 题目描述&#xff1a; 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是…

Transformer面试十问

1 Scaled Dot-Product Attention中为什么要除以 d k \sqrt{d_k} dk​ ​? 1. 从纯数学上考虑&#xff1a;对于输入均值为0,方差为1的分布&#xff0c;点乘后结果其方差为dk&#xff0c;所以需要缩放一下。下图为原论文注释。 2. 从神经网络上考虑&#xff1a;防止在计算点积…