RestTemplate報(bào)錯(cuò)400 Bad Request的解決方案
RestTemplate報(bào)錯(cuò)400 Bad Request
使用RestTemplate發(fā)送http請(qǐng)求,發(fā)現(xiàn)報(bào)錯(cuò)400 Bad Request,其實(shí)這是個(gè)很基礎(chǔ)的問題,一般都能繞過去,像我這樣直接復(fù)制代碼才有可能發(fā)生這樣的錯(cuò)誤情況。
先上原碼:
@Autowired RestTemplate restTemplate; public boolean alarm(String url,String body) { if (body == null || url == null) { return false; } try { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString()); HttpEntity<String> entity = new HttpEntity<>(body, httpHeaders); FeishuAlarmResp result = restTemplate.postForObject(url, entity, FeishuAlarmResp.class); if (result == null || result.getStatusCode() == null || result.getStatusCode() != 0) { log.error("http發(fā)送失敗>>>>>>result={} message={}",JSON.toJSONString(result),body); return false; } } catch (Throwable t) { log.error("http發(fā)送異常:url:" + url + ",body:" + body, t); return false; } return true; }
直接報(bào)錯(cuò):
org.springframework.web.client.HttpClientErrorException: 400 Bad Request
問題所在
不能直接使用 @Autowired 自動(dòng)注入 RestTemplate 使用。
因?yàn)?,官網(wǎng)文檔有寫:
Since RestTemplate instances often need to be customized before being used, Spring Boot does not provide any single auto-configured RestTemplate bean.
(由于RestTemplate實(shí)例在使用前通常需要定制,Spring Boot不提供任何單個(gè)自動(dòng)配置的RestTemplate bean。)
解決辦法
自定義RestTemplate的Bean對(duì)象,重點(diǎn)是要用restTemplateBuilder.build()來創(chuàng)建對(duì)象。
方法1
@Autowired private RestTemplateBuilder restTemplateBuilder; @Autowired private RestTemplate restTemplate; @Bean public RestTemplate getRestTemplate() { return restTemplateBuilder.build(); } //調(diào)用方式: String baiduHtml = restTemplate.getForObject("https://www.baidu.com", String.class); System.out.println(baiduHtml);
方法2:寫個(gè)config類
然后就可以用 @Autowired 自動(dòng)注入 RestTemplate 使用了。
@Component public class RestTemplateConfig { /** * RestTemplate * @return RestTemplate */ @Bean public RestTemplate restTemplate() { return getRestTemplate(); } /** * 獲取自定義 RestTemplate * @return RestTemplate */ private RestTemplate getRestTemplate() { RestTemplate restTemplate = new RestTemplateBuilder() .setConnectTimeout(5 * 1000) .setReadTimeout(60 * 1000) .build(); // 為避免漢字變成問號(hào),將String轉(zhuǎn)換器編碼格式置為 UTF-8 restTemplate.getMessageConverters().forEach(converter -> { if (converter instanceof StringHttpMessageConverter) { ((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8); } }); return restTemplate; } }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java.lang.NumberFormatException異常解決方案詳解
這篇文章主要介紹了java.lang.NumberFormatException異常解決方案詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Java二維數(shù)組實(shí)現(xiàn)數(shù)字拼圖效果
這篇文章主要為大家詳細(xì)介紹了Java二維數(shù)組實(shí)現(xiàn)數(shù)字拼圖效果,控制臺(tái)可以對(duì)空格進(jìn)行移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07Java遞歸算法經(jīng)典實(shí)例(經(jīng)典兔子問題)
本文主要對(duì)經(jīng)典的兔子案例分析,來進(jìn)一步更好的理解和學(xué)習(xí)java遞歸算法,具有很好的參考價(jià)值,需要的朋友一起來看下吧2016-12-12