spring服务间HTTP调用工具封装 RestTempalate
程序员文章站
2024-02-04 20:09:40
...
服务间的Http请求,可以用apache的HttpClient,OkHttp,这些都是需要我们手动回收资源,使用起来如果实在spring框架中,则有更优的选择,即:RestTemplate来实现服务间的通讯调用。
RestTemplate提供了常见的post,get等请求。下面是利用RestTemplate来封装Http请求工具类。
代码部分:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.Map;
@Service
public class RestTemplateService {
private final static Logger LOGGER = LoggerFactory.getLogger(RestTemplateService .class);
@Resource
public RestTemplate restTemplate;
/**
* @Description Post方式调用外部接口
* @param serverUrl-接口地址
* @param param-json格式的接口入参
*/
@Override
public String restTemplatePost(String serverUrl, String param) {
try {
LOGGER.info("调用第三方接口serverUrl={},param={}", serverUrl, param);
return restTemplate.postForObject(serverUrl, param, String.class);
} catch (Exception e) {
LOGGER.error("调用第三方接口serverUrl={},param={}出错:", serverUrl, param, e);
throw new RuntimeException(e);
}
}
/**
* @Description Get方式调用外部接口
* @param serverUrl-接口地址
* @param map-接口入参
*/
@Override
public String restTemplateGet(String serverUrl, Map<String, Object> map) {
try {
serverUrl = getServerUrl(serverUrl, map);
LOGGER.info("调用第三方接口serverUrl={}", serverUrl);
return restTemplate.getForObject(serverUrl, String.class);
} catch (Exception e) {
LOGGER.error("调用第三方接口serverUrl={}出错:", serverUrl, e);
throw new RuntimeException(e);
}
}
/**
* @Description get请求拼接参数
*/
private String getServerUrl(String serverUrl, Map<String, Object> map) {
if (null == map) {
return serverUrl;
}
StringBuilder sb = new StringBuilder();
sb.append(serverUrl).append("?");
map.forEach(
(k, v) -> sb.append(k).append("=").append(v).append("&")
);
sb.deleteCharAt(sb.length() - 1);
return sb.toString();
}
}
上一篇: 网友支招:生成smarttemplate模板处理程序框架
下一篇: mysql配置中的一些重要参数