使用了 RestTemplate、Jackson 来封装了一个简单的http请求工具类,方便后续使用
xml
<!--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>
java
/**
* http工具类
*/
public class HttpUtil {
/** Rest template */
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 = new RestTemplate();
List<HttpMessageConverter<?>> converters = new ArrayList<>(2);
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM));
converters.add(converter);
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
converters.addAll(messageConverters);
restTemplate.setMessageConverters(converters);
return restTemplate;
}
/**
* Get
*
* @param <T> parameter
* @param url url
* @param headers headers
* @param requestObject request object
* @param responseType response type
* @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> parameter
* @param url url
* @param method method
* @param headers headers
* @param requestObject request object
* @param responseType response type
* @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();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
if (headers != null) {
headers.forEach(httpHeaders::add);
}
HttpEntity<Object> httpEntity = new HttpEntity<>(requestObject, httpHeaders);
ResponseEntity<T> responseEntity = this.restTemplate.exchange(url, method, httpEntity, responseType);
return responseEntity.getBody();
}
}