问题描述

本地调用远端接口无误,部署到服务器上调用刚开始也无误,随着时间的推移,调用次数的增加,再次调用时报 400 Bad Request 错误。

问题代码

private String sendRequest(String s) {try {// 请求头HttpHeaders headers = new HttpHeaders();// headers.set("Content-Type","text/html;charset=UTF-8");headers.add("Content-Type","text/html;charset=UTF-8");String xmlmsg = DesUtil.encryption(bssProperties.getPwd(), s);JSONObject encyptionRequest = new JSONObject();encyptionRequest.put("xmlmsg",xmlmsg);encyptionRequest.put("channelcode",bssProperties.getChannelCode());HttpEntity<Map<String, Object>> request = new HttpEntity<>(encyptionRequest, headers);MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_HTML));restTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter);ResponseEntity<String> entity = restTemplate.postForEntity(bssProperties.getUrl(), request,String.class); String body = entity.getBody();JSONObject bodyJson = JSONObject.parseObject(body);String xmlmsgRes = bodyJson.getString("xmlmsg");String str = DesUtil.decrypt(xmlmsgRes, bssProperties.getPwd());logger.info("响应结果-----> " + str);return str;} catch (Exception e) {e.printStackTrace();return null;} }

问题产生原因

由于远端接口的请求头 Content-Type 要设置成 text/html;charset=UTF-8 类型,所以就在方法上添加了转换器,由于这个转换器是 List 集合,导致每次请求都会向 messageConverters 中添加转换器,随着请求次数的增多,messageConverters 越来越大,这会导致 Accept 标头的内容不断增长,导致了 400 Bad Request 错误的产生。

private final List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();

问题解决

将添加转化器的代码放到注册 bean 对象中

@Beanpublic RestTemplate restTemplate(){RestTemplate restTemplate = new RestTemplate();MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_HTML));restTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter);return restTemplate;}

参考资料

  • https://stackoverflow.com/questions/29606808/over-time-of-period-got-400-bad-request-for-resttemplate/35830569
  • https://www.jianshu.com/p/95bf08696cd7

运行一段时间后,RestTemplate请求报400错误相关推荐

  1. python文件运行一段时间后失效_机器人运行一段时间后停止运行,报如下错误

    我使用的是wechat_sender. 下面是我报错的代码 ERROR:tornado.application:Exception in callback Traceback (most recent ...

  2. FlinK运行一段时间后任务任务自己挂掉的问题排查

    最近在做自定义实时报表,由于在前期测试Flink发现Flink拥有比较好的性能,并且天然支持窗口,所以在实时计算的时候,我们选择Flink在做计算框架.在所有的代码完成,代码准备上线的时候,发现Fli ...

  3. Tomcat运行一段时间后访问变慢分析历程

    主要查看三方面: 查看程序中的Session是否定时清空了 查看mysql是否有没有close的连接 查看Tomcat的内存设置,根据下列设置 环境运行一天或者几天,网站访问就很卡,手机端app访问页 ...

  4. 虚拟机运行一段时间后 自动挂起解决方法

    1.电源选项设置问题:请检查虚拟机的电源选项设置,确保其不会在一段时间后自动进入待机模式.您可以通过以下步骤更改电源选项设置: a. 在 Windows 操作系统中,打开控制面板,然后选择" ...

  5. 编写的Matlab程序在运行一段时间后速度会变慢

    我们用matlab编写程序进行数据运算的时候经常会遇到这种情况,就是编写完立马运行,运行速度会非常快,我们感到很满意.但是运行一段时间后,速度就不是那么理想了,恨不得推他一把.这是什么原因呢?通过一段 ...

  6. 前端post请求报400错误

    前端post请求报400错误 发布时间: 2019-06-05 18:28:54 400的错误是由于发送请求参数没有成功 原因:参数名称类型没有对上:或者参数格式不正确 参数格式不正确,解决方法:格式 ...

  7. ali的ons mq运行一段时间后消费下降并导致堆积问题查验

    1:问题现象: 运行的instance一段时间(20h)就下降,重启之后消费正常然后又不行了:原以为是ons版本1.2.7改成laest1.7.7.final;没效果:经验之觉:肯定是代码没优化好: ...

  8. cefsharp项目开发浏览器运行一段时间后cefsharp.browsersubprocess崩溃问题

    基于cefsharp项目用C#开发的程序在windows 系统上运行一段时间老是出现崩溃卡死的情况 如下图: 经过多次测试和调查 发现是在部分机器上才出现该问题 ,其他机器连续运行一周也无错误出现 研 ...

  9. unity打出apk包在模拟器上运行一段时间后卡顿卡死

    笔者在开发unity游戏时,打出的apk包在模拟器上跑一段时间后卡顿卡死. 具体情况为,用安卓模拟器跑游戏,然后用电脑跑其他比较耗cpu的应用,一段时间后游戏帧数逐渐降低,直到0.000几帧,相当于游 ...

最新文章

  1. rotate.js实现图片旋转 (chrome,IE,firefox都可以实现)
  2. GIS-001-gdal软件下载地址
  3. 笔记-信息系统安全管理-网络安全工具
  4. 自主招生计算机论文,自主招生
  5. OpenCV实现简单人脸检测
  6. layer:好看的弹出窗口
  7. 05-windows下SQL Developer连接Orcale
  8. 何时不应该使用 Rails?
  9. (转)c# Invoke和BeginInvoke区别
  10. 在主函数中输入10个等长的字符串。用另一函数对他们排序
  11. VScode透明主题
  12. 摩拜免押金是在阿里的哈罗猛烈攻击下的应对举措
  13. 网络安全- 专访丨互联网安全城市巡回赛冠军肖策:“大满贯”背后的秘密
  14. 养蛙火爆,大数据解读《旅行青蛙》崛起之谜
  15. python异常处理_Python异常处理
  16. PPTV网络电视如何修复浏览器支持异常
  17. 购买php,购买 · 【正版】PHP小程序拼团 · 看云
  18. win10隐藏任务栏_Win10美化指南 | 定制属于你的专属桌面,Windows也能玩出新花样...
  19. ICPC 2022 西安
  20. 深度学习面试题12:LeNet(手写数字识别)

热门文章

  1. Redis 笔记(10)— 发布订阅模式(发布订阅单个信道、订阅信道后的返回值分类、发布订阅多个信道)
  2. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
  3. 工作如果没有方法,光靠苦力是不行的
  4. EdgeBERT:极限压缩bert
  5. tf.contrib.layers.xavier_initializer
  6. Android Studio中RecycerView依赖库加载问题
  7. 基于Vue开发的购物车案例
  8. LeetCode简单题之最常见的单词
  9. PyTorch 自动微分示例
  10. NVIDIA GPUs上深度学习推荐模型的优化