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 ResponseEntity get(String url, Map params, Class responseType) { return get(url, params, responseType, null); } /** * 发送 GET 请求(带 Token) */ public static ResponseEntity get(String url, Map params, Class responseType, String token) { HttpEntity 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 ResponseEntity post(String url, B body, Class responseType) { return post(url, body, responseType, null); } /** * 发送 POST 请求(带 Token) */ public static ResponseEntity post(String url, B body, Class responseType, String token) { HttpHeaders headers = createHeaders(token); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity entity = new HttpEntity<>(body, headers); return restTemplate.exchange(url, HttpMethod.POST, entity, responseType); } /** * 发送表单 POST 请求(不带 Token) */ public static ResponseEntity postForm(String url, Map formData, Class responseType) { return postForm(url, formData, responseType, null); } /** * 发送表单 POST 请求(带 Token) */ public static ResponseEntity postForm(String url, Map formData, Class responseType, String token) { HttpHeaders headers = createHeaders(token); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap map = new LinkedMultiValueMap<>(); if (formData != null) { formData.forEach(map::add); } HttpEntity> entity = new HttpEntity<>(map, headers); return restTemplate.exchange(url, HttpMethod.POST, entity, responseType); } /** * 发送 PUT 请求(不带 Token) */ public static ResponseEntity put(String url, B body, Class responseType) { return put(url, body, responseType, null); } /** * 发送 PUT 请求(带 Token) */ public static ResponseEntity put(String url, B body, Class responseType, String token) { HttpHeaders headers = createHeaders(token); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity entity = new HttpEntity<>(body, headers); return restTemplate.exchange(url, HttpMethod.PUT, entity, responseType); } /** * 发送 DELETE 请求(不带 Token) */ public static ResponseEntity delete(String url, Class responseType) { return delete(url, responseType, null); } /** * 发送 DELETE 请求(带 Token) */ public static ResponseEntity delete(String url, Class responseType, String token) { HttpEntity 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; } }