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() {@
        Override
        public void onResponse(Call call, Response response) throws IOException {
            // 处理响应,这里根据具体情况处理更新成功或失败的逻辑
            String responseData = response.body().string();
            // 在这里处理服务器返回的数据
            System.out.println("responseData" + responseData);

        }

        @
        Override
        public 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.mfbz.cn/a/394013.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【激光SLAM】激光的前端配准算法

文章目录 ICP匹配方法&#xff08;Point to Point&#xff09;PL-ICP匹配方法&#xff08;Point to Line&#xff09;基于优化的匹配方法&#xff08;Optimization-based Method&#xff09;优化方法的求解地图双线性插值拉格朗日插值法——一维线性插值 相关方法&#xff08;C…

JAVA——高并发核心知识点

1、重要概念 现在&#xff0c;并行计算显然已经成为一门正式的学科。也许很多人&#xff08;包括Linus在内&#xff09;都觉得并行计算或者说并行算法是多么的奇葩。但现在我们也不得不承认&#xff0c;在某些领域&#xff0c;这些算法还是有用武之地的。既然说服务端编程还是…

dm_control 翻译: Software and Tasks for Continuous Control

dm_control: Software and Tasks for Continuous Control dm_control&#xff1a;连续控制软件及任务集 文章目录 dm_control: Software and Tasks for Continuous Controldm_control&#xff1a;连续控制软件及任务集Abstract1 Introduction1 引言1.1 Software for research1…

ClickHouse从入门到精通(高级)

第1章 Explain查看执行计划 第2章 建表优化 第3章 ClickHouse语法优化规则 第4章 查询优化 第5章 数据一致性(重点) 第6章 物化视图 第7章 MaterializeMySQL引擎 第8章 常见问题排查

用Boule绘制地球重力场

文章目录 参考椭球标准重力重力地图 参考椭球 boule中定义了多种参考椭球&#xff0c;可用于表示地球、火星等星体的重力分布。可通过pip安装 pip install boule安装完成后可直接调用 import boule as blboule中已经定义的椭球如下 椭球星体GRS80地球WGS84地球MARS火星MERC…

树和二叉树的基本知识

一、树的概念及结构 1.树的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 有一个 特殊…

Linux第61步_“buildroot”构建根文件系统第3步_烧写根文件系统到EMMC中_并完善开发板配置

烧录到EMMC测试&#xff0c;还需进一步测试和配置。 1、删除rootfs”目录下的“rootfs.tar”压缩包 打开第1个终端 输入“ls回车” 输入“cd linux/回车”&#xff0c;切换到“linux”目录 输入“ls回车”&#xff0c;列出“linux”目录下的文件和文件夹 输入“cd nfs/回…

杨辉三角的变形(数学)

题目 import java.util.Scanner;public class Main {public static void main(String[] args) { // 1 // 1 1 1 // 1 2 3 2 1 // 1 3 6 7 6 3 1 // 1 4 10 16 19 16 10 4 1Scanner sc new Scanner(System.in);int n sc.nextInt();int[][] res new int[n1][2*n];for(i…

FPGA之移位寄存器

SLICEM中的LUT可以配置为32位移位寄存器,而无需使用slice中可用的触发器。以这种方式使用,每个LUT 可以将串 行数据延迟 1 到 32 个时钟周期。移入D &#xff08;DI1 LUT 引脚&#xff09;和移出 Q31&#xff08;MC31 LUT 引脚&#xff09;线路将LUT级联&#xff0c;以形成更大…

Python:常见的运算符

一、算术运算符 算术在数学中可以直接运用的一些运算规则&#xff1a; ------- 加法运算 - ------- 减法运算 * ------- 乘法运算 / ------- 除法运算 强数据类型语言中/表示的整除运算 // ------ 整除 % ------ 取余运算 ** ------ 幂次方运算 >>> a 10 >>&…

GDB调试指南

1. 启动gdb gdb [program名] # 比如gdb main gdb [program名] core # 用于调试coredump的错误&#xff0c;需加上生成的core文件路径 gdb -p [pid] # 按进程号调试 2. 调试运行中的程序 当正在运行的程序出现故障&#xff0c;比如服务器程序&#xff0c;无法终止&#xff0c;…

Vite 构建流程大揭秘:快速构建前端项目的秘密武器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

物奇平台DRC动态范围控制修改方法

物奇平台DRC动态范围控制修改 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 音频 DRC 是指动态范围控制(Dyna

Android系统app开发

Android系统app开发 系统app阔以使用很多系统源码中隐藏的api 首先先编译出jar包 整编源码后&#xff0c;在这个目录下&#xff0c;这个就是包含系统源码隐藏api的jar包 系统app的标志 拷贝jar文件到app模块下 在编译之前把这个jar添加到classpath路径里面去&#xff0c;这样…

基于python的遥感影像灰色关联矩阵纹理特征计算

遥感影像纹理特征是描述影像中像素间空间关系的统计特征&#xff0c;常用于地物分类、目标识别和变化检测等遥感应用中。常见的纹理特征计算方式包括灰度共生矩阵&#xff08;GLCM&#xff09;、灰度差异矩阵&#xff08;GLDM&#xff09;、灰度不均匀性矩阵&#xff08;GLRLM&…

软件架构与系统架构:区别与联系的分析

软件架构与系统架构&#xff1a;区别与联系的分析 在信息技术领域&#xff0c;软件架构和系统架构这两个术语经常被提及。尽管它们在某些方面有重叠&#xff0c;但它们确实代表了不同的概念和聚焦点。理解这两种架构之间的区别和联系对于任何从事技术开发和设计的专业人士都是至…

大模型LLM训练显存消耗详解

参考论文&#xff1a;ZeRO: Memory Optimizations Toward Training Trillion Parameter Models 大模型的显存消耗一直都是面试常见的问题&#xff0c;这次我就彻彻底底的根据论文ZeRO中的调研和分析做一次分析 显存消耗的两个部分&#xff1a;Model States&#xff08;跟模型的…

spark sql官网优化指南

两句话概括 缓存数据调整参数 缓存数据 把数据缓存到内存,spark sql能够只扫描需要列并且会自动压缩数据,占用最小的内存和减小GC压力。这无需多言,内存远远要快于磁盘,spark效率比hive高这个就是一个主要原因。 缓存数据代码spark.catalog.cacheTable("tableName&qu…

unity C#中的封装、继承和多态简单易懂的经典实例

文章目录 封装 (Encapsulation)继承 (Inheritance)多态 (Polymorphism) C#中的封装、继承和多态是面向对象编程&#xff08;OOP&#xff09;的三大核心特性。下面分别对这三个概念进行深入解释&#xff0c;并通过实例来说明它们在实际开发中的应用。 封装 (Encapsulation) 实例…

java项目的构建流程

1.创建项目 2.创建模块 创建时要注意组ID的命名 通常包含以下模块: 项目的pom文件中,依赖如下(web模块不需要依赖,也不需要main文件夹): 3.配置pom文件 1),主pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://mav…
最新文章