RestTemplate的使用
1. restTemplate简介
restTemplate是spring框架提供的,可以简化与restful服务进行交互的过程。可以在服务中方便的调用其他http服务。
2. 使用方法
2.1 配置
写一个配置类bean用于自动注入,将RestTemplate对象丢给spring管理,不需要每次使用的时候都new一个对象出来。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RequestConfig
{
@Bean
public RestTemplate restTemplate()
{
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
//设置连接超时时间
requestFactory.setConnectTimeout(1000);
//设置读取超时时间
requestFactory.setReadTimeout(1000);
return new RestTemplate(requestFactory);
}
}
在业务代码中请求其他http服务接口需要设置超时时间,不影响后面逻辑的执行。
2.2 Get请求
HttpEntity中的泛型类为请求体的类型,可以放一个自定义的类,用作post请求的body。
ResponseEntity中的泛型类为返回值类型,RestTemplate会将返回值自动转为你定义的类型。
public String getRequest(Long id, String url){
String res = "";
try{
HttpEntity<String> entity = new HttpEntity<String>(null, jsonHeaders);
String reqUrl = url + "?id=%s";
reqUrl = String.format(reqUrl, id);
/***发送get请求,将返回值转成String类型***/
ResponseEntity<String> responseEntity = restTemplate.exchange(reqUrl,
HttpMethod.GET, entity, String.class);
if (responseEntity.getStatusCode().is2xxSuccessful()){
//如果请求成功,取到返回值之后写对应的逻辑
}else{
logger.error("error");
}
}catch (Exception e){
logger.error("query error--", e);
}
return res;
}
2.3 Post请求
//设置请求头为application/json用于发送post请求
static {
jsonHeaders = new HttpHeaders();
jsonHeaders.setContentType(MediaType.APPLICATION_JSON);
}
public List<HotQueryData> listGameSiteHotQuery(String url,HotQueryRequest request) {
List<HotQueryData> list = new ArrayList<>(0);
try {
//HotQueryRequest,HotQueryResponse为自定义的类型
HttpEntity<HotQueryRequest> httpEntity = new HttpEntity<>(request, jsonHeaders);
ResponseEntity<HotQueryResponse> rsp = restTemplate.exchange(url, HttpMethod.POST,
httpEntity, HotQueryResponse.class);
logger.info("hotQuery rsp {}", rsp.toString());
if (rsp.getStatusCode().is2xxSuccessful()) {
HotQueryResponse response = rsp.getBody();
if (response != null && response.getData() != null) {
list = response.getData();
}
} else {
logger.error("hot query request time out or error");
}
} catch (Exception e) {
logger.info("hotQuery error {}", e);
}
return list;
}