package com.se.nsl.utils;
|
|
import org.springframework.http.*;
|
import org.springframework.util.LinkedMultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
import org.springframework.web.client.RestTemplate;
|
|
import java.util.Map;
|
import java.util.Optional;
|
|
/**
|
* HTTP 请求工具类,支持带/不带 Token 的请求
|
*/
|
public class HttpRequestUtil {
|
|
private static final RestTemplate restTemplate = new RestTemplate();
|
|
/**
|
* 发送 GET 请求(不带 Token)
|
*/
|
public static <T> ResponseEntity<T> get(String url, Map<String, String> params, Class<T> responseType) {
|
return get(url, params, responseType, null);
|
}
|
|
/**
|
* 发送 GET 请求(带 Token)
|
*/
|
public static <T> ResponseEntity<T> get(String url, Map<String, String> params, Class<T> responseType, String token) {
|
HttpEntity<String> entity = new HttpEntity<>(null, createHeaders(token));
|
|
// 构建带参数的 URL
|
if (params != null && !params.isEmpty()) {
|
StringBuilder urlBuilder = new StringBuilder(url).append("?");
|
params.forEach((key, value) -> urlBuilder.append(key).append("=").append(value).append("&"));
|
url = urlBuilder.substring(0, urlBuilder.length() - 1);
|
}
|
|
return restTemplate.exchange(url, HttpMethod.GET, entity, responseType);
|
}
|
|
/**
|
* 发送 POST 请求(不带 Token)
|
*/
|
public static <T, B> ResponseEntity<T> post(String url, B body, Class<T> responseType) {
|
return post(url, body, responseType, null);
|
}
|
|
/**
|
* 发送 POST 请求(带 Token)
|
*/
|
public static <T, B> ResponseEntity<T> post(String url, B body, Class<T> responseType, String token) {
|
HttpHeaders headers = createHeaders(token);
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
HttpEntity<B> entity = new HttpEntity<>(body, headers);
|
|
return restTemplate.exchange(url, HttpMethod.POST, entity, responseType);
|
}
|
|
/**
|
* 发送表单 POST 请求(不带 Token)
|
*/
|
public static <T> ResponseEntity<T> postForm(String url, Map<String, Object> formData, Class<T> responseType) {
|
return postForm(url, formData, responseType, null);
|
}
|
|
/**
|
* 发送表单 POST 请求(带 Token)
|
*/
|
public static <T> ResponseEntity<T> postForm(String url, Map<String, Object> formData, Class<T> responseType, String token) {
|
HttpHeaders headers = createHeaders(token);
|
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
|
|
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
|
if (formData != null) {
|
formData.forEach(map::add);
|
}
|
|
HttpEntity<MultiValueMap<String, Object>> entity = new HttpEntity<>(map, headers);
|
|
return restTemplate.exchange(url, HttpMethod.POST, entity, responseType);
|
}
|
|
/**
|
* 发送 PUT 请求(不带 Token)
|
*/
|
public static <T, B> ResponseEntity<T> put(String url, B body, Class<T> responseType) {
|
return put(url, body, responseType, null);
|
}
|
|
/**
|
* 发送 PUT 请求(带 Token)
|
*/
|
public static <T, B> ResponseEntity<T> put(String url, B body, Class<T> responseType, String token) {
|
HttpHeaders headers = createHeaders(token);
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
HttpEntity<B> entity = new HttpEntity<>(body, headers);
|
|
return restTemplate.exchange(url, HttpMethod.PUT, entity, responseType);
|
}
|
|
/**
|
* 发送 DELETE 请求(不带 Token)
|
*/
|
public static <T> ResponseEntity<T> delete(String url, Class<T> responseType) {
|
return delete(url, responseType, null);
|
}
|
|
/**
|
* 发送 DELETE 请求(带 Token)
|
*/
|
public static <T> ResponseEntity<T> delete(String url, Class<T> responseType, String token) {
|
HttpEntity<String> entity = new HttpEntity<>(null, createHeaders(token));
|
|
return restTemplate.exchange(url, HttpMethod.DELETE, entity, responseType);
|
}
|
|
/**
|
* 创建 HTTP 头
|
* @param token 认证 Token,可为 null
|
* @return HTTP 头
|
*/
|
private static HttpHeaders createHeaders(String token) {
|
HttpHeaders headers = new HttpHeaders();
|
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
|
|
// 如果提供了 Token,则添加到请求头
|
Optional.ofNullable(token)
|
.ifPresent(t -> headers.set("Authorization", "Bearer " + t));
|
|
return headers;
|
}
|
}
|