当前位置: 首页 > news >正文

Spring RestClient报错:400 Bad Request : [no body]

我项目采用微服务架构,所以各服务之间通过Spring RestClient远程调用,本来一直工作得好好的,昨天突然发现远程调用一直报错,错误详情如下:

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: [no body]at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:103) ~[spring-web-6.1.5.jar!/:6.1.5]at org.springframework.web.client.StatusHandler.lambda$defaultHandler$3(StatusHandler.java:86) ~[spring-web-6.1.5.jar!/:6.1.5]at org.springframework.web.client.StatusHandler.handle(StatusHandler.java:146) ~[spring-web-6.1.5.jar!/:6.1.5]at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.applyStatusHandlers(DefaultRestClient.java:680) ~[spring-web-6.1.5.jar!/:6.1.5]at org.springframework.web.client.DefaultRestClient.readWithMessageConverters(DefaultRestClient.java:200) ~[spring-web-6.1.5.jar!/:6.1.5]at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.readBody(DefaultRestClient.java:667) ~[spring-web-6.1.5.jar!/:6.1.5]at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.body(DefaultRestClient.java:621) ~[spring-web-6.1.5.jar!/:6.1.5]at org.springframework.web.client.support.RestClientAdapter.exchangeForBody(RestClientAdapter.java:73) ~[spring-web-6.1.5.jar!/:6.1.5]at org.springframework.web.service.invoker.HttpServiceMethod$ExchangeResponseFunction.lambda$create$4(HttpServiceMethod.java:379) ~[spring-web-6.1.5.jar!/:6.1.5]at org.springframework.web.service.invoker.HttpServiceMethod$ExchangeResponseFunction.execute(HttpServiceMethod.java:336) ~[spring-web-6.1.5.jar!/:6.1.5]at org.springframework.web.service.invoker.HttpServiceMethod.invoke(HttpServiceMethod.java:130) ~[spring-web-6.1.5.jar!/:6.1.5]at org.springframework.web.service.invoker.HttpServiceProxyFactory$HttpServiceMethodInterceptor.invoke(HttpServiceProxyFactory.java:303) ~[spring-web-6.1.5.jar!/:6.1.5]at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) ~[spring-aop-6.1.5.jar!/:6.1.5]at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:220) ~[spring-aop-6.1.5.jar!/:6.1.5]at jdk.proxy3/jdk.proxy3.$Proxy184.getLoginUser(Unknown Source) ~[na:na]at com.ibm.risk.irmp.common.auth.JWTFilter.doFilter(JWTFilter.java:66) ~[irmp-common-2.1.0-SNAPSHOT.jar!/:na]

服务端打开最低级日志,发现报错说是Request Parse Error: Invalid Headers
但这两天也没改远程调用的代码呀!仔细查看了文请求header,也没发现异常,
把代码退回到前天版本发现正常。
仔细回想了一下,既然没改代码,那估计是依赖的问题吧?排查了一下,昨天加了一个华为云存储桶的依赖:

        <dependency><groupId>com.huaweicloud</groupId><artifactId>esdk-obs-java</artifactId><version>3.23.9.1</version></dependency>

再看看esdk-obs-java又依赖了okhttp,那么很可能是Spring检测到有okhttp就优先使用okhttp了吧?
把esdk-obs-java去掉一测,果然正常了。
哼哼,原来okhttp还有这问题,于是把spring restclient 初始化直接指定一个httpclient:

RestClient restClient = RestClient.builder().requestFactory(new ReactorNettyClientRequestFactory()).baseUrl(url).build();

再加上esdk-obs-java依赖,测试一切平静如常了

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CentOS7 配置Nginx域名HTTPS
  • React@16.x(23)useEffect
  • [ue5]建模场景学习笔记(5)——必修内容可交互的地形,交互沙(3)
  • Spring Boot 深度学习笔记:从入门到精通的全面指南
  • 【报文数据流中的反压处理】
  • CleanMyMac2024最新免费电脑Mac系统优化工具
  • SQL Server中的CTE和临时表优化
  • C语言 | Leetcode C语言题解之第140题单词拆分II
  • CMakeLists如何多行注释
  • 计算机毕业设计python+spark知识图谱音乐推荐系统 音乐数据分析可视化大屏 音乐爬虫 LSTM情感分析 大数据毕设 深度学习 机器学习
  • RoLabelImg下载及旋转目标检测数据标注
  • Linux | buildrootfs 添加mkfs.ext3/mkfs.ext4 支持
  • 【算法小记】深度学习——时间序列数据分析 Time series Data Analysis
  • C#操作MySQL从入门到精通(17)——使用联结
  • Android AOSP定制去掉Google搜索栏
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • docker python 配置
  • HTTP请求重发
  • JavaScript 一些 DOM 的知识点
  • PHP 的 SAPI 是个什么东西
  • Python 基础起步 (十) 什么叫函数?
  • uni-app项目数字滚动
  • 分布式任务队列Celery
  • 深入 Nginx 之配置篇
  • 手机app有了短信验证码还有没必要有图片验证码?
  • -- 数据结构 顺序表 --Java
  • 项目实战-Api的解决方案
  • 新版博客前端前瞻
  • 如何在招聘中考核.NET架构师
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​iOS安全加固方法及实现
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​什么是bug?bug的源头在哪里?
  • #define与typedef区别
  • #LLM入门|Prompt#3.3_存储_Memory
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (二)springcloud实战之config配置中心
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (简单) HDU 2612 Find a way,BFS。
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .bashrc在哪里,alias妙用
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET : 在VS2008中计算代码度量值
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core 6 redis操作类
  • .Net core 6.0 升8.0
  • .net core Swagger 过滤部分Api
  • .NET Core 实现 Redis 批量查询指定格式的Key