运行一段时间后,RestTemplate请求报400错误
生活随笔
收集整理的這篇文章主要介紹了
运行一段时间后,RestTemplate请求报400错误
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題描述
本地調用遠端接口無誤,部署到服務器上調用剛開始也無誤,隨著時間的推移,調用次數的增加,再次調用時報 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错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse中导入web项目详细配置
- 下一篇: idea中项目失去svn控制