import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.lang.Nullable;
import org.springframework.web.client.RestTemplate;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
/**
* Rest客户端
*
* @author heaven
*
*/
@Builder
@Slf4j
@NoArgsConstructor
@AllArgsConstructor
public class RestClient {
/**
* 请求方法
*/
HttpMethod httpMethod;
@Builder.Default
RestTemplate restTemplate = new RestTemplate();
public void setCharsets() {
List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> httpMessageConverter : list) {
if(httpMessageConverter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(StandardCharsets.UTF_8);
}
}
}
/**
* 发起rest请求
* @param url 请求地址
* @param body 请求体,对post,put,delete等有请求体有效,对get无效
* @param responseType 设置相应结果绑定对象
* @param uriVariables 请求变量,用于组装请求url
* @return 响应结果
*/
public <T> Optional<T> restRequest(String url, @Nullable Object body, Class<T> responseType,
Map<String, ?> uriVariables) {
T response = null;
switch (httpMethod) {
case GET:
response = restTemplate.getForObject(url, responseType, uriVariables);break;
case POST:
response = restTemplate.postForObject(url, body, responseType, uriVariables);break;
default:
log.error("not support method");
}
return Optional.ofNullable(response);
}
public String restRequest(String url, String request) {
String result = null;
/**
* 添加headers
* 所有请求必须携带
* */
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("需要携带的头文件", "不需要,可以不写");
HttpEntity<String> requestEntity = new HttpEntity<String>(null, requestHeaders);
if("post".equals(request)) {
result = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class).getBody();
}
if("get".equals(request)) {
result = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class).getBody();
}
return result;
}
}