java RestTemplate 發送post請求

RestTemplate簡介

RestTemplate是執行HTTP請求的同步阻塞式的客戶端,它在HTTP客戶端庫(如JDK HttpURLConnection,Apache HttpComponents,okHttp等)基礎封裝了更加簡單易用的模板方法API。即RestTemplate是一個封裝,底層的實現還是java應用開發中常用的一些HTTP客戶端。相對於直接使用底層的HTTP客戶端庫,它的操作更加方便、快捷,能很大程度上提升我們的開發效率。

case1: POST, 格式:application/json

/**
 * 採用POST請求,數據格式爲 application/json,並且返回結果是JSON string
 * @param url
 * @param
 * @return
 */
public  static String postForJson(String url, JSONObject json){
    RestTemplate restTemplate = new RestTemplate();
    //設置Http Header
    HttpHeaders headers = new HttpHeaders();
    //設置請求媒體數據類型
    headers.setContentType(MediaType.APPLICATION_JSON);
    //設置返回媒體數據類型
    headers.add("Accept", MediaType.APPLICATION_JSON.toString());
    HttpEntity<String> formEntity = new HttpEntity<String>(json.toString(), headers);
    return restTemplate.postForObject(url, formEntity, String.class);
}

 

case2:POST, 格式:application/x-www-form-urlencoded

/**
 * 採用POST請求,數據格式爲 application/x-www-form-urlencoded,並且返回結果是JSON string
 * @param url 請求地址
 * @param
 * @return
 */
public static String postInvocation(String url, MultiValueMap<String, Object> param) {
    RestTemplate restTemplate = new RestTemplate();
    //設置Http Header
    HttpHeaders headers = new HttpHeaders();
    //設置請求媒體數據類型
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    //設置返回媒體數據類型
    HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(param, headers);
    return restTemplate.postForObject(url, httpEntity,String.class);
}

 

問題 No beans of 'RestTemplate' type found

使用RestTemplate, 如果直接使用註解

@Autowired
private RestTemplate restTemplate2;

報錯:Could not autowire. No beans of 'RestTemplate' type found. 

原因:SpringBoot在版本≥1.4後不再自動定義RestTemplate,而是需要自己手動定義。

解① 自定義Bean

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

 

解② 手工自定義

RestTemplate restTemplate = new RestTemplate();
or
private RestTemplate restTemplate = new RestTemplateBuilder()
.setConnectTimeout(Duration.ofSeconds(2))
.setReadTimeout(Duration.ofSeconds(5))
.build();

參考

https://www.4spaces.org/1069.html

https://blog.csdn.net/qq_27130997/article/details/81625845

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章