1. <dependency>
    2. <groupId>com.squareup.okhttp3</groupId>
    3. <artifactId>okhttp</artifactId>
    4. <version>4.9.0</version>
    5. </dependency>
    1. import com.alibaba.fastjson.JSON;
    2. import com.alibaba.fastjson.JSONObject;
    3. import com.isyscore.app.env.watcher.exception.BusinessException;
    4. import com.isyscore.isc.neo.util.ObjectUtil;
    5. import lombok.Data;
    6. import lombok.experimental.UtilityClass;
    7. import lombok.extern.slf4j.Slf4j;
    8. import okhttp3.*;
    9. import org.springframework.util.StringUtils;
    10. import java.io.File;
    11. import java.io.IOException;
    12. import java.io.Serializable;
    13. import java.lang.reflect.Field;
    14. import java.util.*;
    15. import java.util.concurrent.ConcurrentHashMap;
    16. import java.util.concurrent.TimeUnit;
    17. import java.util.logging.Level;
    18. import java.util.logging.Logger;
    19. /**
    20. * @author shizi
    21. * @since 2020/11/21 11:28 AM
    22. */
    23. @Slf4j
    24. @UtilityClass
    25. public class HttpHelper {
    26. private final String LOG_PRE = "[http-helper] ";
    27. private final String GET = "GET";
    28. private final String HEAD = "HEAD";
    29. private final String POST = "POST";
    30. private final String PUT = "PUT";
    31. private final String PATCH = "PATCH";
    32. private final String DELETE = "DELETE";
    33. // okhttp暂时不支持
    34. private final String OPTION = "OPTION";
    35. // okhttp暂时不支持
    36. private final String TRACE = "TRACE";
    37. private final OkHttpClient client;
    38. static {
    39. Integer TIME_OUT = 30 * 1000;
    40. client = new OkHttpClient.Builder().connectTimeout(TIME_OUT, TimeUnit.MILLISECONDS).readTimeout(TIME_OUT, TimeUnit.MILLISECONDS).build();
    41. Logger.getLogger(OkHttpClient.class.getName()).setLevel(Level.INFO);
    42. }
    43. // ------------------ get ------------------
    44. public <T> T get(Class<T> responseClass, String url) {
    45. return doRequestForObject(responseClass, GET, url, Headers.of(), Parameters.of(), true, null);
    46. }
    47. public <T> List<T> getList(Class<T> responseClass, String url) {
    48. return doRequestForList(responseClass, GET, url, Headers.of(), Parameters.of(), true, null);
    49. }
    50. public <T> T getOfStandard(Class<T> responseClass, String url) {
    51. return doRequestForObjectOfStandard(responseClass, GET, url, Headers.of(), Parameters.of(), true, null);
    52. }
    53. public <T> List<T> getListOfStandard(Class<T> responseClass, String url) {
    54. return doRequestForListOfStandard(responseClass, GET, url, Headers.of(), Parameters.of(), true, null);
    55. }
    56. public <T> T get(Class<T> responseClass, String url, Parameters parameters) {
    57. return doRequestForObject(responseClass, GET, url, Headers.of(), parameters, true, null);
    58. }
    59. public <T> List<T> getList(Class<T> responseClass, String url, Parameters parameters) {
    60. return doRequestForList(responseClass, GET, url, Headers.of(), parameters, true, null);
    61. }
    62. public <T> T getOfStandard(Class<T> responseClass, String url, Parameters parameters) {
    63. return doRequestForObjectOfStandard(responseClass, GET, url, Headers.of(), parameters, true, null);
    64. }
    65. public <T> List<T> getListOfStandard(Class<T> responseClass, String url, Parameters parameters) {
    66. return doRequestForListOfStandard(responseClass, GET, url, Headers.of(), parameters, true, null);
    67. }
    68. public <T> T get(Class<T> responseClass, String url, Headers headers) {
    69. return doRequestForObject(responseClass, GET, url, headers, Parameters.of(), true, null);
    70. }
    71. public <T> List<T> getList(Class<T> responseClass, String url, Headers headers) {
    72. return doRequestForList(responseClass, GET, url, headers, Parameters.of(), true, null);
    73. }
    74. public <T> T getOfStandard(Class<T> responseClass, String url, Headers headers) {
    75. return doRequestForObjectOfStandard(responseClass, GET, url, headers, Parameters.of(), true, null);
    76. }
    77. public <T> List<T> getListOfStandard(Class<T> responseClass, String url, Headers headers) {
    78. return doRequestForListOfStandard(responseClass, GET, url, headers, Parameters.of(), true, null);
    79. }
    80. public <T> T get(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
    81. return doRequestForObject(responseClass, GET, url, headers, parameters, true, null);
    82. }
    83. public <T> List<T> getList(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
    84. return doRequestForList(responseClass, GET, url, headers, parameters, true, null);
    85. }
    86. public <T> T getOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
    87. return doRequestForObjectOfStandard(responseClass, GET, url, headers, parameters, true, null);
    88. }
    89. public <T> List<T> getListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
    90. return doRequestForListOfStandard(responseClass, GET, url, headers, parameters, true, null);
    91. }
    92. public void get(String url) {
    93. doRequestForObject(null, GET, url, Headers.of(), Parameters.of(), true, null);
    94. }
    95. public void getList(String url) {
    96. doRequestForList(null, GET, url, Headers.of(), Parameters.of(), true, null);
    97. }
    98. public void getOfStandard(String url) {
    99. doRequestForObjectOfStandard(null, GET, url, Headers.of(), Parameters.of(), true, null);
    100. }
    101. public void getListOfStandard(String url) {
    102. doRequestForListOfStandard(null, GET, url, Headers.of(), Parameters.of(), true, null);
    103. }
    104. public void get(String url, Parameters parameters) {
    105. doRequestForObject(null, GET, url, Headers.of(), parameters, true, null);
    106. }
    107. public void getList(String url, Parameters parameters) {
    108. doRequestForList(null, GET, url, Headers.of(), parameters, true, null);
    109. }
    110. public void getOfStandard(String url, Parameters parameters) {
    111. doRequestForObjectOfStandard(null, GET, url, Headers.of(), parameters, true, null);
    112. }
    113. public void getListOfStandard(String url, Parameters parameters) {
    114. doRequestForListOfStandard(null, GET, url, Headers.of(), parameters, true, null);
    115. }
    116. public void get(String url, Headers headers) {
    117. doRequestForObject(null, GET, url, headers, Parameters.of(), true, null);
    118. }
    119. public void getList(String url, Headers headers) {
    120. doRequestForList(null, GET, url, headers, Parameters.of(), true, null);
    121. }
    122. public void getOfStandard(String url, Headers headers) {
    123. doRequestForObjectOfStandard(null, GET, url, headers, Parameters.of(), true, null);
    124. }
    125. public void getListOfStandard(String url, Headers headers) {
    126. doRequestForListOfStandard(null, GET, url, headers, Parameters.of(), true, null);
    127. }
    128. public void get(String url, Headers headers, Parameters parameters) {
    129. doRequestForObject(null, GET, url, headers, parameters, true, null);
    130. }
    131. public void getList(String url, Headers headers, Parameters parameters) {
    132. doRequestForList(null, GET, url, headers, parameters, true, null);
    133. }
    134. public void getOfStandard(String url, Headers headers, Parameters parameters) {
    135. doRequestForObjectOfStandard(null, GET, url, headers, parameters, true, null);
    136. }
    137. public void getListOfStandard(String url, Headers headers, Parameters parameters) {
    138. doRequestForListOfStandard(null, GET, url, headers, parameters, true, null);
    139. }
    140. // ------------------ head ------------------
    141. public void head(String url) {
    142. doRequestForObject(null, HEAD, url, Headers.of(), Parameters.of(), true, null);
    143. }
    144. public void headList(String url) {
    145. doRequestForList(null, HEAD, url, Headers.of(), Parameters.of(), true, null);
    146. }
    147. public void headOfStandard(String url) {
    148. doRequestForObjectOfStandard(null, HEAD, url, Headers.of(), Parameters.of(), true, null);
    149. }
    150. public void headListOfStandard(String url) {
    151. doRequestForListOfStandard(null, HEAD, url, Headers.of(), Parameters.of(), true, null);
    152. }
    153. public void head(String url, Parameters parameters) {
    154. doRequestForObject(null, HEAD, url, Headers.of(), parameters, true, null);
    155. }
    156. public void headList(String url, Parameters parameters) {
    157. doRequestForList(null, HEAD, url, Headers.of(), parameters, true, null);
    158. }
    159. public void headOfStandard(String url, Parameters parameters) {
    160. doRequestForObjectOfStandard(null, HEAD, url, Headers.of(), parameters, true, null);
    161. }
    162. public void headListOfStandard(String url, Parameters parameters) {
    163. doRequestForListOfStandard(null, HEAD, url, Headers.of(), parameters, true, null);
    164. }
    165. public void head(String url, Headers headers) {
    166. doRequestForObject(null, HEAD, url, headers, Parameters.of(), true, null);
    167. }
    168. public void headList(String url, Headers headers) {
    169. doRequestForList(null, HEAD, url, headers, Parameters.of(), true, null);
    170. }
    171. public void headOfStandard(String url, Headers headers) {
    172. doRequestForObjectOfStandard(null, HEAD, url, headers, Parameters.of(), true, null);
    173. }
    174. public void headListOfStandard(String url, Headers headers) {
    175. doRequestForListOfStandard(null, HEAD, url, headers, Parameters.of(), true, null);
    176. }
    177. public void head(String url, Headers headers, Parameters parameters) {
    178. doRequestForObject(null, HEAD, url, headers, parameters, true, null);
    179. }
    180. public void headList(String url, Headers headers, Parameters parameters) {
    181. doRequestForList(null, HEAD, url, headers, parameters, true, null);
    182. }
    183. public void headOfStandard(String url, Headers headers, Parameters parameters) {
    184. doRequestForObjectOfStandard(null, HEAD, url, headers, parameters, true, null);
    185. }
    186. public void headListOfStandard(String url, Headers headers, Parameters parameters) {
    187. doRequestForListOfStandard(null, HEAD, url, headers, parameters, true, null);
    188. }
    189. // ------------------ post ------------------
    190. public void post(String url, Object body) {
    191. doRequestForObject(null, POST, url, Headers.of(), Parameters.of(), false, body);
    192. }
    193. public void postOfStandard(String url, Object body) {
    194. doRequestForObjectOfStandard(null, POST, url, Headers.of(), Parameters.of(), false, body);
    195. }
    196. public void post(String url, Parameters parameters, Object body) {
    197. doRequestForObject(null, POST, url, Headers.of(), parameters, false, body);
    198. }
    199. public void postOfStandard(String url, Parameters parameters, Object body) {
    200. doRequestForObjectOfStandard(null, POST, url, Headers.of(), parameters, false, body);
    201. }
    202. public void post(String url, Headers headers, Object body) {
    203. doRequestForObject(null, POST, url, headers, Parameters.of(), false, body);
    204. }
    205. public void postOfStandard(String url, Headers headers, Object body) {
    206. doRequestForObjectOfStandard(null, POST, url, headers, Parameters.of(), false, body);
    207. }
    208. public void post(String url, Headers headers, Parameters parameters, Object body) {
    209. doRequestForObject(null, POST, url, headers, parameters, false, body);
    210. }
    211. public void postOfStandard(String url, Headers headers, Parameters parameters, Object body) {
    212. doRequestForObjectOfStandard(null, POST, url, headers, parameters, false, body);
    213. }
    214. public <T> T post(Class<T> responseClass, String url, Object body) {
    215. return doRequestForObject(responseClass, POST, url, Headers.of(), Parameters.of(), false, body);
    216. }
    217. public <T> List<T> postList(Class<T> responseClass, String url, Object body) {
    218. return doRequestForList(responseClass, POST, url, Headers.of(), Parameters.of(), false, body);
    219. }
    220. public <T> T postOfStandard(Class<T> responseClass, String url, Object body) {
    221. return doRequestForObjectOfStandard(responseClass, POST, url, Headers.of(), Parameters.of(), false, body);
    222. }
    223. public <T> List<T> postListOfStandard(Class<T> responseClass, String url, Object body) {
    224. return doRequestForListOfStandard(responseClass, POST, url, Headers.of(), Parameters.of(), false, body);
    225. }
    226. public <T> T post(Class<T> responseClass, String url, Parameters parameters, Object body) {
    227. return doRequestForObject(responseClass, POST, url, Headers.of(), parameters, false, body);
    228. }
    229. public <T> List<T> postList(Class<T> responseClass, String url, Parameters parameters, Object body) {
    230. return doRequestForList(responseClass, POST, url, Headers.of(), parameters, false, body);
    231. }
    232. public <T> T postOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
    233. return doRequestForObjectOfStandard(responseClass, POST, url, Headers.of(), parameters, false, body);
    234. }
    235. public <T> List<T> postListOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
    236. return doRequestForListOfStandard(responseClass, POST, url, Headers.of(), parameters, false, body);
    237. }
    238. public <T> T post(Class<T> responseClass, String url, Headers headers, Object body) {
    239. return doRequestForObject(responseClass, POST, url, headers, Parameters.of(), false, body);
    240. }
    241. public <T> List<T> postList(Class<T> responseClass, String url, Headers headers, Object body) {
    242. return doRequestForList(responseClass, POST, url, headers, Parameters.of(), false, body);
    243. }
    244. public <T> T postOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
    245. return doRequestForObjectOfStandard(responseClass, POST, url, headers, Parameters.of(), false, body);
    246. }
    247. public <T> List<T> postListOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
    248. return doRequestForListOfStandard(responseClass, POST, url, headers, Parameters.of(), false, body);
    249. }
    250. public <T> T postFormData(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    251. return doRequestFormDataForObject(responseClass, POST, url, headers, parameters, false, body);
    252. }
    253. public <T> T post(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    254. return doRequestForObject(responseClass, POST, url, headers, parameters, false, body);
    255. }
    256. public <T> List<T> postList(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    257. return doRequestForList(responseClass, POST, url, headers, parameters, false, body);
    258. }
    259. public <T> T postOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    260. return doRequestForObjectOfStandard(responseClass, POST, url, headers, parameters, false, body);
    261. }
    262. public <T> List<T> postListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    263. return doRequestForListOfStandard(responseClass, POST, url, headers, parameters, false, body);
    264. }
    265. // ------------------ put ------------------
    266. public void put(String url) {
    267. doRequestForObject(null, PUT, url, Headers.of(), Parameters.of(), false, null);
    268. }
    269. public void putOfStandard(String url) {
    270. doRequestForObjectOfStandard(null, PUT, url, Headers.of(), Parameters.of(), false, null);
    271. }
    272. public void put(String url, Headers headers, Parameters parameters) {
    273. doRequestForObject(null, PUT, url, headers, parameters, false, null);
    274. }
    275. public void putOfStandard(String url, Headers headers, Parameters parameters) {
    276. doRequestForObjectOfStandard(null, PUT, url, headers, parameters, false, null);
    277. }
    278. public <T> T put(Class<T> responseClass, String url) {
    279. return doRequestForObject(responseClass, PUT, url, Headers.of(), Parameters.of(), false, null);
    280. }
    281. public <T> List<T> putList(Class<T> responseClass, String url) {
    282. return doRequestForList(responseClass, PUT, url, Headers.of(), Parameters.of(), false, null);
    283. }
    284. public <T> T putOfStandard(Class<T> responseClass, String url) {
    285. return doRequestForObjectOfStandard(responseClass, PUT, url, Headers.of(), Parameters.of(), false, null);
    286. }
    287. public <T> List<T> putListOfStandard(Class<T> responseClass, String url) {
    288. return doRequestForListOfStandard(responseClass, PUT, url, Headers.of(), Parameters.of(), false, null);
    289. }
    290. public <T> T put(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
    291. return doRequestForObject(responseClass, PUT, url, headers, parameters, false, null);
    292. }
    293. public <T> List<T> putList(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
    294. return doRequestForList(responseClass, PUT, url, headers, parameters, false, null);
    295. }
    296. public <T> T putOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
    297. return doRequestForObjectOfStandard(responseClass, PUT, url, headers, parameters, false, null);
    298. }
    299. public <T> List<T> putListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
    300. return doRequestForListOfStandard(responseClass, PUT, url, headers, parameters, false, null);
    301. }
    302. public void put(String url, Object body) {
    303. doRequestForObject(null, PUT, url, Headers.of(), Parameters.of(), false, body);
    304. }
    305. public void putOfStandard(String url, Object body) {
    306. doRequestForObjectOfStandard(null, PUT, url, Headers.of(), Parameters.of(), false, body);
    307. }
    308. public void put(String url, Parameters parameters, Object body) {
    309. doRequestForObject(null, PUT, url, Headers.of(), parameters, false, body);
    310. }
    311. public void putOfStandard(String url, Parameters parameters, Object body) {
    312. doRequestForObjectOfStandard(null, PUT, url, Headers.of(), parameters, false, body);
    313. }
    314. public void put(String url, Headers headers, Object body) {
    315. doRequestForObject(null, PUT, url, headers, Parameters.of(), false, body);
    316. }
    317. public void putOfStandard(String url, Headers headers, Object body) {
    318. doRequestForObjectOfStandard(null, PUT, url, headers, Parameters.of(), false, body);
    319. }
    320. public void put(String url, Headers headers, Parameters parameters, Object body) {
    321. doRequestForObject(null, PUT, url, headers, parameters, false, body);
    322. }
    323. public void putOfStandard(String url, Headers headers, Parameters parameters, Object body) {
    324. doRequestForObjectOfStandard(null, PUT, url, headers, parameters, false, body);
    325. }
    326. public <T> T put(Class<T> responseClass, String url, Object body) {
    327. return doRequestForObject(responseClass, PUT, url, Headers.of(), Parameters.of(), false, body);
    328. }
    329. public <T> List<T> putList(Class<T> responseClass, String url, Object body) {
    330. return doRequestForList(responseClass, PUT, url, Headers.of(), Parameters.of(), false, body);
    331. }
    332. public <T> T putOfStandard(Class<T> responseClass, String url, Object body) {
    333. return doRequestForObjectOfStandard(responseClass, PUT, url, Headers.of(), Parameters.of(), false, body);
    334. }
    335. public <T> List<T> putListOfStandard(Class<T> responseClass, String url, Object body) {
    336. return doRequestForListOfStandard(responseClass, PUT, url, Headers.of(), Parameters.of(), false, body);
    337. }
    338. public <T> T put(Class<T> responseClass, String url, Parameters parameters, Object body) {
    339. return doRequestForObject(responseClass, PUT, url, Headers.of(), parameters, false, body);
    340. }
    341. public <T> List<T> putList(Class<T> responseClass, String url, Parameters parameters, Object body) {
    342. return doRequestForList(responseClass, PUT, url, Headers.of(), parameters, false, body);
    343. }
    344. public <T> T putOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
    345. return doRequestForObjectOfStandard(responseClass, PUT, url, Headers.of(), parameters, false, body);
    346. }
    347. public <T> List<T> putListOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
    348. return doRequestForListOfStandard(responseClass, PUT, url, Headers.of(), parameters, false, body);
    349. }
    350. public <T> T put(Class<T> responseClass, String url, Headers headers, Object body) {
    351. return doRequestForObject(responseClass, PUT, url, headers, Parameters.of(), false, body);
    352. }
    353. public <T> List<T> putList(Class<T> responseClass, String url, Headers headers, Object body) {
    354. return doRequestForList(responseClass, PUT, url, headers, Parameters.of(), false, body);
    355. }
    356. public <T> T putOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
    357. return doRequestForObjectOfStandard(responseClass, PUT, url, headers, Parameters.of(), false, body);
    358. }
    359. public <T> List<T> putListOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
    360. return doRequestForListOfStandard(responseClass, PUT, url, headers, Parameters.of(), false, body);
    361. }
    362. public <T> T put(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    363. return doRequestForObject(responseClass, PUT, url, headers, parameters, false, body);
    364. }
    365. public <T> List<T> putList(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    366. return doRequestForList(responseClass, PUT, url, headers, parameters, false, body);
    367. }
    368. public <T> T putOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    369. return doRequestForObjectOfStandard(responseClass, PUT, url, headers, parameters, false, body);
    370. }
    371. public <T> List<T> putListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    372. return doRequestForListOfStandard(responseClass, PUT, url, headers, parameters, false, body);
    373. }
    374. // ------------------ delete ------------------
    375. public <T> T delete(Class<T> responseClass, String url) {
    376. return doRequestForObject(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, null);
    377. }
    378. public <T> List<T> deleteList(Class<T> responseClass, String url) {
    379. return doRequestForList(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, null);
    380. }
    381. public <T> T deleteOfStandard(Class<T> responseClass, String url) {
    382. return doRequestForObjectOfStandard(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, null);
    383. }
    384. public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url) {
    385. return doRequestForListOfStandard(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, null);
    386. }
    387. public <T> T delete(Class<T> responseClass, String url, Parameters parameters) {
    388. return doRequestForObject(responseClass, DELETE, url, Headers.of(), parameters, true, null);
    389. }
    390. public <T> List<T> deleteList(Class<T> responseClass, String url, Parameters parameters) {
    391. return doRequestForList(responseClass, DELETE, url, Headers.of(), parameters, true, null);
    392. }
    393. public <T> T deleteOfStandard(Class<T> responseClass, String url, Parameters parameters) {
    394. return doRequestForObjectOfStandard(responseClass, DELETE, url, Headers.of(), parameters, true, null);
    395. }
    396. public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Parameters parameters) {
    397. return doRequestForListOfStandard(responseClass, DELETE, url, Headers.of(), parameters, true, null);
    398. }
    399. public <T> T delete(Class<T> responseClass, String url, Headers headers) {
    400. return doRequestForObject(responseClass, DELETE, url, headers, Parameters.of(), true, null);
    401. }
    402. public <T> List<T> deleteList(Class<T> responseClass, String url, Headers headers) {
    403. return doRequestForList(responseClass, DELETE, url, headers, Parameters.of(), true, null);
    404. }
    405. public <T> T deleteOfStandard(Class<T> responseClass, String url, Headers headers) {
    406. return doRequestForObjectOfStandard(responseClass, DELETE, url, headers, Parameters.of(), true, null);
    407. }
    408. public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Headers headers) {
    409. return doRequestForListOfStandard(responseClass, DELETE, url, headers, Parameters.of(), true, null);
    410. }
    411. public <T> T delete(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
    412. return doRequestForObject(responseClass, DELETE, url, headers, parameters, true, null);
    413. }
    414. public <T> List<T> deleteList(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
    415. return doRequestForList(responseClass, DELETE, url, headers, parameters, true, null);
    416. }
    417. public <T> T deleteOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
    418. return doRequestForObjectOfStandard(responseClass, DELETE, url, headers, parameters, true, null);
    419. }
    420. public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters) {
    421. return doRequestForListOfStandard(responseClass, DELETE, url, headers, parameters, true, null);
    422. }
    423. public void delete(String url) {
    424. doRequestForObject(null, DELETE, url, Headers.of(), Parameters.of(), true, null);
    425. }
    426. public void deleteList(String url) {
    427. doRequestForList(null, DELETE, url, Headers.of(), Parameters.of(), true, null);
    428. }
    429. public void deleteOfStandard(String url) {
    430. doRequestForObjectOfStandard(null, DELETE, url, Headers.of(), Parameters.of(), true, null);
    431. }
    432. public void deleteListOfStandard(String url) {
    433. doRequestForListOfStandard(null, DELETE, url, Headers.of(), Parameters.of(), true, null);
    434. }
    435. public void delete(String url, Parameters parameters) {
    436. doRequestForObject(null, DELETE, url, Headers.of(), parameters, true, null);
    437. }
    438. public void deleteList(String url, Parameters parameters) {
    439. doRequestForList(null, DELETE, url, Headers.of(), parameters, true, null);
    440. }
    441. public void deleteOfStandard(String url, Parameters parameters) {
    442. doRequestForObjectOfStandard(null, DELETE, url, Headers.of(), parameters, true, null);
    443. }
    444. public void deleteListOfStandard(String url, Parameters parameters) {
    445. doRequestForListOfStandard(null, DELETE, url, Headers.of(), parameters, true, null);
    446. }
    447. public void delete(String url, Headers headers) {
    448. doRequestForObject(null, DELETE, url, headers, Parameters.of(), true, null);
    449. }
    450. public void deleteList(String url, Headers headers) {
    451. doRequestForList(null, DELETE, url, headers, Parameters.of(), true, null);
    452. }
    453. public void deleteOfStandard(String url, Headers headers) {
    454. doRequestForObjectOfStandard(null, DELETE, url, headers, Parameters.of(), true, null);
    455. }
    456. public void deleteListOfStandard(String url, Headers headers) {
    457. doRequestForListOfStandard(null, DELETE, url, headers, Parameters.of(), true, null);
    458. }
    459. public void delete(String url, Headers headers, Parameters parameters) {
    460. doRequestForObject(null, DELETE, url, headers, parameters, true, null);
    461. }
    462. public void deleteList(String url, Headers headers, Parameters parameters) {
    463. doRequestForList(null, DELETE, url, headers, parameters, true, null);
    464. }
    465. public void deleteOfStandard(String url, Headers headers, Parameters parameters) {
    466. doRequestForObjectOfStandard(null, DELETE, url, headers, parameters, true, null);
    467. }
    468. public void deleteListOfStandard(String url, Headers headers, Parameters parameters) {
    469. doRequestForListOfStandard(null, DELETE, url, headers, parameters, true, null);
    470. }
    471. public void delete(String url, Object body) {
    472. doRequestForObject(null, DELETE, url, Headers.of(), Parameters.of(), true, body);
    473. }
    474. public void deleteOfStandard(String url, Object body) {
    475. doRequestForObjectOfStandard(null, DELETE, url, Headers.of(), Parameters.of(), true, body);
    476. }
    477. public void delete(String url, Parameters parameters, Object body) {
    478. doRequestForObject(null, DELETE, url, Headers.of(), parameters, true, body);
    479. }
    480. public void deleteOfStandard(String url, Parameters parameters, Object body) {
    481. doRequestForObjectOfStandard(null, DELETE, url, Headers.of(), parameters, true, body);
    482. }
    483. public void delete(String url, Headers headers, Object body) {
    484. doRequestForObject(null, DELETE, url, headers, Parameters.of(), true, body);
    485. }
    486. public void deleteOfStandard(String url, Headers headers, Object body) {
    487. doRequestForObjectOfStandard(null, DELETE, url, headers, Parameters.of(), true, body);
    488. }
    489. public void delete(String url, Headers headers, Parameters parameters, Object body) {
    490. doRequestForObject(null, DELETE, url, headers, parameters, true, body);
    491. }
    492. public void deleteOfStandard(String url, Headers headers, Parameters parameters, Object body) {
    493. doRequestForObjectOfStandard(null, DELETE, url, headers, parameters, true, body);
    494. }
    495. public <T> T delete(Class<T> responseClass, String url, Object body) {
    496. return doRequestForObject(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, body);
    497. }
    498. public <T> List<T> deleteList(Class<T> responseClass, String url, Object body) {
    499. return doRequestForList(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, body);
    500. }
    501. public <T> T deleteOfStandard(Class<T> responseClass, String url, Object body) {
    502. return doRequestForObjectOfStandard(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, body);
    503. }
    504. public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Object body) {
    505. return doRequestForListOfStandard(responseClass, DELETE, url, Headers.of(), Parameters.of(), true, body);
    506. }
    507. public <T> T delete(Class<T> responseClass, String url, Parameters parameters, Object body) {
    508. return doRequestForObject(responseClass, DELETE, url, Headers.of(), parameters, true, body);
    509. }
    510. public <T> List<T> deleteList(Class<T> responseClass, String url, Parameters parameters, Object body) {
    511. return doRequestForList(responseClass, DELETE, url, Headers.of(), parameters, true, body);
    512. }
    513. public <T> T deleteOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
    514. return doRequestForObjectOfStandard(responseClass, DELETE, url, Headers.of(), parameters, true, body);
    515. }
    516. public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
    517. return doRequestForListOfStandard(responseClass, DELETE, url, Headers.of(), parameters, true, body);
    518. }
    519. public <T> T delete(Class<T> responseClass, String url, Headers headers, Object body) {
    520. return doRequestForObject(responseClass, DELETE, url, headers, Parameters.of(), true, body);
    521. }
    522. public <T> List<T> deleteList(Class<T> responseClass, String url, Headers headers, Object body) {
    523. return doRequestForList(responseClass, DELETE, url, headers, Parameters.of(), true, body);
    524. }
    525. public <T> T deleteOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
    526. return doRequestForObjectOfStandard(responseClass, DELETE, url, headers, Parameters.of(), true, body);
    527. }
    528. public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
    529. return doRequestForListOfStandard(responseClass, DELETE, url, headers, Parameters.of(), true, body);
    530. }
    531. public <T> T delete(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    532. return doRequestForObject(responseClass, DELETE, url, headers, parameters, true, body);
    533. }
    534. public <T> List<T> deleteList(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    535. return doRequestForList(responseClass, DELETE, url, headers, parameters, true, body);
    536. }
    537. public <T> T deleteOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    538. return doRequestForObjectOfStandard(responseClass, DELETE, url, headers, parameters, true, body);
    539. }
    540. public <T> List<T> deleteListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    541. return doRequestForListOfStandard(responseClass, DELETE, url, headers, parameters, true, body);
    542. }
    543. // ------------------ patch ------------------
    544. public void patch(String url, Object body) {
    545. doRequestForObject(null, PATCH, url, Headers.of(), Parameters.of(), false, body);
    546. }
    547. public void patchOfStandard(String url, Object body) {
    548. doRequestForObjectOfStandard(null, PATCH, url, Headers.of(), Parameters.of(), false, body);
    549. }
    550. public void patch(String url, Parameters parameters, Object body) {
    551. doRequestForObject(null, PATCH, url, Headers.of(), parameters, false, body);
    552. }
    553. public void patchOfStandard(String url, Parameters parameters, Object body) {
    554. doRequestForObjectOfStandard(null, PATCH, url, Headers.of(), parameters, false, body);
    555. }
    556. public void patch(String url, Headers headers, Object body) {
    557. doRequestForObject(null, PATCH, url, headers, Parameters.of(), false, body);
    558. }
    559. public void patchOfStandard(String url, Headers headers, Object body) {
    560. doRequestForObjectOfStandard(null, PATCH, url, headers, Parameters.of(), false, body);
    561. }
    562. public void patch(String url, Headers headers, Parameters parameters, Object body) {
    563. doRequestForObject(null, PATCH, url, headers, parameters, false, body);
    564. }
    565. public void patchOfStandard(String url, Headers headers, Parameters parameters, Object body) {
    566. doRequestForObjectOfStandard(null, PATCH, url, headers, parameters, false, body);
    567. }
    568. public <T> T patch(Class<T> responseClass, String url, Object body) {
    569. return doRequestForObject(responseClass, PATCH, url, Headers.of(), Parameters.of(), false, body);
    570. }
    571. public <T> List<T> patchList(Class<T> responseClass, String url, Object body) {
    572. return doRequestForList(responseClass, PATCH, url, Headers.of(), Parameters.of(), false, body);
    573. }
    574. public <T> T patchOfStandard(Class<T> responseClass, String url, Object body) {
    575. return doRequestForObjectOfStandard(responseClass, PATCH, url, Headers.of(), Parameters.of(), false, body);
    576. }
    577. public <T> List<T> patchListOfStandard(Class<T> responseClass, String url, Object body) {
    578. return doRequestForListOfStandard(responseClass, PATCH, url, Headers.of(), Parameters.of(), false, body);
    579. }
    580. public <T> T patch(Class<T> responseClass, String url, Parameters parameters, Object body) {
    581. return doRequestForObject(responseClass, PATCH, url, Headers.of(), parameters, false, body);
    582. }
    583. public <T> List<T> patchList(Class<T> responseClass, String url, Parameters parameters, Object body) {
    584. return doRequestForList(responseClass, PATCH, url, Headers.of(), parameters, false, body);
    585. }
    586. public <T> T patchOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
    587. return doRequestForObjectOfStandard(responseClass, PATCH, url, Headers.of(), parameters, false, body);
    588. }
    589. public <T> List<T> patchListOfStandard(Class<T> responseClass, String url, Parameters parameters, Object body) {
    590. return doRequestForListOfStandard(responseClass, PATCH, url, Headers.of(), parameters, false, body);
    591. }
    592. public <T> T patch(Class<T> responseClass, String url, Headers headers, Object body) {
    593. return doRequestForObject(responseClass, PATCH, url, headers, Parameters.of(), false, body);
    594. }
    595. public <T> List<T> patchList(Class<T> responseClass, String url, Headers headers, Object body) {
    596. return doRequestForList(responseClass, PATCH, url, headers, Parameters.of(), false, body);
    597. }
    598. public <T> T patchOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
    599. return doRequestForObjectOfStandard(responseClass, PATCH, url, headers, Parameters.of(), false, body);
    600. }
    601. public <T> List<T> patchListOfStandard(Class<T> responseClass, String url, Headers headers, Object body) {
    602. return doRequestForListOfStandard(responseClass, PATCH, url, headers, Parameters.of(), false, body);
    603. }
    604. public <T> T patch(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    605. return doRequestForObject(responseClass, PATCH, url, headers, parameters, false, body);
    606. }
    607. public <T> List<T> patchList(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    608. return doRequestForList(responseClass, PATCH, url, headers, parameters, false, body);
    609. }
    610. public <T> T patchOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    611. return doRequestForObjectOfStandard(responseClass, PATCH, url, headers, parameters, false, body);
    612. }
    613. public <T> List<T> patchListOfStandard(Class<T> responseClass, String url, Headers headers, Parameters parameters, Object body) {
    614. return doRequestForListOfStandard(responseClass, PATCH, url, headers, parameters, false, body);
    615. }
    616. // ------------------ options ------------------
    617. // 该协议okhttp暂时不支持
    618. // ------------------ trace ------------------
    619. // 该协议okhttp暂时不支持
    620. private <T> T doRequestForObject(Class<T> responseClass, String httpMethod, String url, Headers headers, Parameters parameters, Boolean allowNull, Object body) {
    621. Request request = new Request.Builder().method(httpMethod, getRequestBody(allowNull, body)).headers(headers).url(getBuilder(url, parameters).build()).build();
    622. try (Response response = call(request, url)) {
    623. try (ResponseBody responseBody = response.body()) {
    624. if (null == responseBody) {
    625. return null;
    626. }
    627. return parseObject(responseClass, url, responseBody);
    628. }
    629. }
    630. }
    631. private <T> T doRequestFormDataForObject(Class<T> responseClass, String httpMethod, String url, Headers headers, Parameters parameters, Boolean allowNull, Object body) {
    632. Request request = new Request.Builder().method(httpMethod, getRequestBodyFormData(body)).headers(headers).url(getBuilder(url, parameters).build()).build();
    633. try (Response response = call(request, url)) {
    634. try (ResponseBody responseBody = response.body()) {
    635. if (null == responseBody) {
    636. return null;
    637. }
    638. return parseObject(responseClass, url, responseBody);
    639. }
    640. }
    641. }
    642. private <T> List<T> doRequestForList(Class<T> responseClass, String httpMethod, String url, Headers headers, Parameters parameters, Boolean allowNull, Object body) {
    643. Request request = new Request.Builder().method(httpMethod, getRequestBody(allowNull, body)).headers(headers).url(getBuilder(url, parameters).build()).build();
    644. try (Response response = call(request, url)) {
    645. try (ResponseBody responseBody = response.body()) {
    646. if (null == responseBody) {
    647. return null;
    648. }
    649. return parseList(responseClass, url, responseBody);
    650. }
    651. }
    652. }
    653. private <T> T doRequestForObjectOfStandard(Class<T> responseClass, String httpMethod, String url, Headers headers, Parameters parameters, Boolean allowNull, Object body) {
    654. Request request = new Request.Builder().method(httpMethod, getRequestBody(allowNull, body)).headers(headers).url(getBuilder(url, parameters).build()).build();
    655. try (Response response = call(request, url)) {
    656. try (ResponseBody responseBody = response.body()) {
    657. if (null == responseBody) {
    658. return null;
    659. }
    660. return parseObjectOfStandard(responseClass, url, responseBody);
    661. }
    662. }
    663. }
    664. private <T> List<T> doRequestForListOfStandard(Class<T> responseClass, String httpMethod, String url, Headers headers, Parameters parameters, Boolean allowNull, Object body) {
    665. Request request = new Request.Builder().method(httpMethod, getRequestBody(allowNull, body)).headers(headers).url(getBuilder(url, parameters).build()).build();
    666. try (Response response = call(request, url)) {
    667. try (ResponseBody responseBody = response.body()) {
    668. if (null == responseBody) {
    669. return null;
    670. }
    671. return parseListOfStandard(responseClass, url, responseBody);
    672. }
    673. }
    674. }
    675. private HttpUrl.Builder getBuilder(String url, Parameters parameters) {
    676. HttpUrl.Builder httpBuilder = Objects.requireNonNull(HttpUrl.parse(url)).newBuilder();
    677. parameters.parameterMap.forEach(httpBuilder::addQueryParameter);
    678. return httpBuilder;
    679. }
    680. private RequestBody getRequestBody(Boolean allowNull, Object body) {
    681. if (null == body) {
    682. if (allowNull) {
    683. return null;
    684. }
    685. return RequestBody.create(MediaType.parse("application/json"), JSON.toJSONString(new HashMap<>()));
    686. }
    687. return RequestBody.create(MediaType.parse("application/json"), JSON.toJSONString(body));
    688. }
    689. private RequestBody getRequestBodyFormData(Object body) {
    690. MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
    691. for (Field declaredField : body.getClass().getDeclaredFields()) {
    692. declaredField.setAccessible(true);
    693. Class<?> fieldCls = declaredField.getType();
    694. if (File.class.isAssignableFrom(fieldCls)) {
    695. try {
    696. File fieldFileData = (File) declaredField.get(body);
    697. if (null == fieldFileData) {
    698. continue;
    699. }
    700. String extension = FileUtil.extension(fieldFileData.getName());
    701. if (StringUtils.isEmpty(extension)) {
    702. continue;
    703. }
    704. MediaType mediaType = MediaType.parse(extension);
    705. if (null == mediaType) {
    706. mediaType = MediaType.parse("multipart/form-data");
    707. }
    708. builder.addFormDataPart(declaredField.getName(), fieldFileData.getName(), RequestBody.create(mediaType, fieldFileData));
    709. } catch (IllegalAccessException e) {
    710. log.warn("读取文件部分【{}】异常", declaredField.getName(), e);
    711. }
    712. } else {
    713. try {
    714. String fieldStr = ObjectUtil.toStr(declaredField.get(body));
    715. if (null == fieldStr) {
    716. continue;
    717. }
    718. builder.addFormDataPart(declaredField.getName(), fieldStr);
    719. } catch (IllegalAccessException e) {
    720. log.warn("获取属性【{}】异常", declaredField.getName(), e);
    721. }
    722. }
    723. }
    724. return builder.build();
    725. }
    726. public Response call(Request request, String url) {
    727. Response response = null;
    728. try {
    729. response = client.newCall(request).execute();
    730. if (!response.isSuccessful()) {
    731. throw new RuntimeException(response.code() + ", url=" + url + ", code=" + response.code());
    732. }
    733. return response;
    734. } catch (Throwable e) {
    735. if (null != response) {
    736. log.error(LOG_PRE + "请求异常,url={}, code={}, request={}", url, response.code(), request);
    737. response.close();
    738. } else {
    739. log.error(LOG_PRE + "请求异常,request={}", request);
    740. }
    741. throw new RuntimeException(e.getMessage(), e);
    742. }
    743. }
    744. public <T> T parseObject(Class<T> tClass, String url, ResponseBody responseBody) {
    745. try {
    746. if (null == tClass) {
    747. return null;
    748. }
    749. return (T) ObjectUtils.cast(tClass, responseBody.string());
    750. } catch (IOException e) {
    751. log.error(LOG_PRE + "请求异常,url={}", url, e);
    752. throw new RuntimeException("请求异常");
    753. }
    754. }
    755. private <T> List<T> parseList(Class<T> tClass, String url, ResponseBody responseBody) {
    756. try {
    757. if (null == tClass) {
    758. return null;
    759. }
    760. return JSON.parseArray(responseBody.string(), tClass);
    761. } catch (IOException e) {
    762. log.error(LOG_PRE + "请求异常,url=" + url, e);
    763. throw new RuntimeException("请求异常");
    764. }
    765. }
    766. private <T> T parseObjectOfStandard(Class<T> tClass, String url, ResponseBody responseBody) {
    767. try {
    768. StandardResponse<?> response = JSONObject.parseObject(responseBody.bytes(), StandardResponse.class);
    769. if (response.isSuccess()) {
    770. if (null == tClass) {
    771. return null;
    772. }
    773. return (T) ObjectUtils.cast(tClass, response.getData());
    774. } else {
    775. log.error("异常返回, code={}, message={}", response.getCode(), response.getMessage());
    776. throw new BusinessException(Integer.valueOf(String.valueOf(response.getCode())), response.getMessage());
    777. }
    778. } catch (IOException e) {
    779. log.error("请求异常,url=" + url, e);
    780. throw new RuntimeException("请求异常");
    781. }
    782. }
    783. private <T> List<T> parseListOfStandard(Class<T> tClass, String url, ResponseBody responseBody) {
    784. try {
    785. if (null == tClass) {
    786. return null;
    787. }
    788. StandardResponse<?> response = JSONObject.parseObject(responseBody.bytes(), StandardResponse.class);
    789. if (response.isSuccess()) {
    790. return JSON.parseArray(JSON.toJSONString(response.getData()), tClass);
    791. } else {
    792. log.error("异常返回, code={}, message={}", response.getCode(), response.getMessage());
    793. throw new BusinessException(Integer.valueOf(String.valueOf(response.getCode())), response.getMessage());
    794. }
    795. } catch (IOException e) {
    796. log.error("请求异常,url=" + url, e);
    797. throw new RuntimeException("请求异常");
    798. }
    799. }
    800. @Data
    801. public class StandardResponse<T> implements Serializable {
    802. private Object code;
    803. private String message;
    804. private T data;
    805. public boolean isSuccess() {
    806. if (null == code) {
    807. return false;
    808. } else if (code instanceof String) {
    809. return "success".equals(code);
    810. } else if (code instanceof Integer) {
    811. return Integer.valueOf(0).equals(code);
    812. }
    813. return false;
    814. }
    815. }
    816. /**
    817. * 参数的kv类型
    818. */
    819. public static class Parameters {
    820. private final Map<String, String> parameterMap = new ConcurrentHashMap<>();
    821. private Parameters() {}
    822. public static Boolean isUnEmpty(Parameters parameters) {
    823. return !isEmpty(parameters);
    824. }
    825. public static Boolean isEmpty(Parameters parameters) {
    826. if (null == parameters) {
    827. return true;
    828. }
    829. return parameters.toMap().isEmpty();
    830. }
    831. public static Parameters of(String... kvs) {
    832. if (kvs.length % 2 != 0) {
    833. log.error(LOG_PRE + "Parameters.of的参数需要是key-value-key-value...这种格式");
    834. return new Parameters();
    835. }
    836. Parameters parameters = new Parameters();
    837. for (int i = 0; i < kvs.length; i += 2) {
    838. if (null == kvs[i]) {
    839. log.error(LOG_PRE + "map的key不可以为null");
    840. return parameters;
    841. }
    842. if(null == kvs[i + 1]) {
    843. log.error(LOG_PRE + "map的value不可以为null");
    844. return parameters;
    845. }
    846. parameters.toMap().put(kvs[i], kvs[i + 1]);
    847. }
    848. return parameters;
    849. }
    850. public void put(String key, String value) {
    851. parameterMap.put(key, value);
    852. }
    853. public Map<String, String> toMap() {
    854. return parameterMap;
    855. }
    856. }
    857. }