使用了 RestTemplate、Jackson 来封装了一个简单的http请求工具类,方便后续使用
<!--jackson依赖 2.11.1 版本-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
/**
* http工具类
*/
public class HttpUtil {
/** 创建RestTemplate */
private final RestTemplate restTemplate;
/**
* Http util
*
* @since 1.0.0
*/
public HttpUtil() {
this.restTemplate = createRestTemplate();
}
/**
* Http util
*
* @param restTemplate rest template
* @since 1.0.0
*/
public HttpUtil(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
/**
* Create rest template
*
* @return the rest template
* @since 1.0.0
*/
private RestTemplate createRestTemplate() {
//创建RestTemplate对象
RestTemplate restTemplate = new RestTemplate();
//设置http消息的转换器,这里让RestTemplate使用jackson框架提供的
List<HttpMessageConverter<?>> converters = new ArrayList<>(2);
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
//设置当前http的转换器的支持类型为json
converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM));
converters.add(converter);
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
//将消息转换器设置到RestTemplate中
converters.addAll(messageConverters);
restTemplate.setMessageConverters(converters);
return restTemplate;
}
/**
* get方法
*
* @param <T> 响应的泛型类
* @param url 请求地址
* @param headers 自定义的请求头
* @param requestObject 请求对象
* @param responseType 响应的类型
* @return the t
* @since 1.0.0
*/
public <T> T get(String url, Map<String, String> headers, Object requestObject, Class<T> responseType) {
return sendRequest(url, HttpMethod.GET, headers, requestObject, responseType);
}
/**
* Get
*
* @param <T> parameter
* @param url url
* @param requestObject request object
* @param responseType response type
* @return the t
* @since 1.0.0
*/
public <T> T get(String url, Object requestObject, Class<T> responseType) {
return sendRequest(url, HttpMethod.GET, null, requestObject, responseType);
}
/**
* Get
*
* @param <T> parameter
* @param url url
* @param responseType response type
* @return the t
* @since 1.0.0
*/
public <T> T get(String url, Class<T> responseType) {
return sendRequest(url, HttpMethod.GET, null, null, responseType);
}
/**
* Post
*
* @param <T> parameter
* @param url url
* @param headers headers
* @param requestObject request object
* @param responseType response type
* @return t t
* @since 1.0.0
*/
public <T> T post(String url, Map<String, String> headers, Object requestObject, Class<T> responseType) {
return sendRequest(url, HttpMethod.POST, headers, requestObject, responseType);
}
/**
* Post
*
* @param <T> parameter
* @param url url
* @param requestObject request object
* @param responseType response type
* @return the t
* @since 1.0.0
*/
public <T> T post(String url, Object requestObject, Class<T> responseType) {
return sendRequest(url, HttpMethod.POST, null, requestObject, responseType);
}
/**
* Post
*
* @param <T> parameter
* @param url url
* @param responseType response type
* @return the t
* @since 1.0.0
*/
public <T> T post(String url, Class<T> responseType) {
return sendRequest(url, HttpMethod.POST, null, null, responseType);
}
/**
* Send request
*
* @param <T> 参数
* @param url url地址
* @param method 请求的方法类型
* @param headers 请求头
* @param requestObject 请求的参数
* @param responseType 响应类型
* @return the t
* @since 1.0.0
*/
public <T> T sendRequest(String url, HttpMethod method,
Map<String, String> headers,
Object requestObject,
Class<T> responseType) {
HttpHeaders httpHeaders = new HttpHeaders();
//设置请求的类容为json
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
if (headers != null) {
headers.forEach(httpHeaders::add);
}
//创建HttpEntity,用于参数的拼接
HttpEntity<Object> httpEntity = new HttpEntity<>(requestObject, httpHeaders);
ResponseEntity<T> responseEntity = this.restTemplate.exchange(url, method, httpEntity, responseType);
return responseEntity.getBody();
}
}