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