dcb
2025-07-09 e53252b99e7b49b435b7a6ee3eab21ae1bd7a055
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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;
    }
}