1.介绍
spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接, 我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。
2.添加配置文件
@Configuration
public class RestTemplateConfig {
/**
* 没有实例化RestTemplate时,初始化RestTemplate
* @return
*/
@ConditionalOnMissingBean(RestTemplate.class)
@Bean
public RestTemplate restTemplate(){
RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());
//解决参数乱码问题
restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
return restTemplate;
}
/**
* 使用HttpClient作为底层客户端
* @return
*/
private ClientHttpRequestFactory getClientHttpRequestFactory() {
int timeout = 5000;//超时时间
RequestConfig config = RequestConfig.custom()
.setConnectTimeout(timeout)
.setConnectionRequestTimeout(timeout)
.setSocketTimeout(timeout)
.build();
CloseableHttpClient client = HttpClientBuilder
.create()
.setDefaultRequestConfig(config)
.build();
return new HttpComponentsClientHttpRequestFactory(client);
}
}
3.常用方法
1.get请求 不参数
String url = "http://IP:PORT/query";
JSONObject json = restTemplate.getForObject(url, JSONObject.class);
JSONObject data=json .getJSONObject("response");
2.get请求 传参数
注意:url 请求链接后面要对应上相应的参数,JSONObject.class返回值类型可以自定义
String url = "http://IP:PORT/query?token={token}&id={id}";
HashMap paramMap= new HashMap();
paramMap.put("token","111");
paramMap.put("id", "222");
restTemplate.getForObject(url, JSONObject.class,paramMap);
3.post请求 模拟表单发送请求
String url = "http://IP:PORT/testPostByform";
// 请求头设置,x-www-form-urlencoded格式的数据
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
//headers.add("token","test");
//提交参数设置
HashMap paramMap= new HashMap();
paramMap.add("userName", "测试");
paramMap.add("userPwd", "123456");
// 组装请求体
HttpEntity<HashMap> request = new HttpEntity<>(paramMap, headers);
//发起请求
restTemplate.postForObject(url, request, JSONObject.class);
4.post请求 发送参数请求
String url = "http://IP:PORT/testPost";
// 要发送的数据对象
PostDTO postDTO = new PostDTO();
postDTO.setUserId(110);
postDTO.setTitle("测试1");
postDTO.setBody("测试2");
// 发送post请求,并输出结果
restTemplate.postForObject(url, postDTO, JSONObject.class);
|