|
@@ -461,6 +461,79 @@ public class RequestComponent {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 构造post请求
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param url
|
|
|
|
|
+ * @param body
|
|
|
|
|
+ * @param responseClass
|
|
|
|
|
+ * @param headers
|
|
|
|
|
+ * @param <Response> 响应实体
|
|
|
|
|
+ * @return <Response> ResponseEntity<Response>
|
|
|
|
|
+ */
|
|
|
|
|
+ public <Response> ResponseEntity<Response> daJiaImgPost(String url, Object body, Class<Response> responseClass, HttpHeaders headers) {
|
|
|
|
|
+ log.info("URL的值:{},body的值:{}", url, body);
|
|
|
|
|
+ WebClient webClient = selectNoSSLWebClient2();
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 创建一个不带Accept-Encoding的请求头,避免服务器返回压缩数据
|
|
|
|
|
+ HttpHeaders requestHeaders = new HttpHeaders();
|
|
|
|
|
+ if (headers != null) {
|
|
|
|
|
+ requestHeaders.addAll(headers);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 移除Accept-Encoding头,让服务器返回未压缩的数据
|
|
|
|
|
+ requestHeaders.remove("Accept-Encoding");
|
|
|
|
|
+
|
|
|
|
|
+ // 获取响应实体
|
|
|
|
|
+ ResponseEntity<String> rawResponse = webClient.post()
|
|
|
|
|
+ .uri(url)
|
|
|
|
|
+ .headers(setHeaders(requestHeaders))
|
|
|
|
|
+ .body(BodyInserters.fromValue(body))
|
|
|
|
|
+ .retrieve()
|
|
|
|
|
+ .toEntity(String.class)
|
|
|
|
|
+ .block();
|
|
|
|
|
+ if (rawResponse == null) {
|
|
|
|
|
+ throw new WebClientResponseException(500, "No response received", HttpHeaders.EMPTY, "No response received".getBytes(StandardCharsets.UTF_8), null);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ String responseBody = rawResponse.getBody();
|
|
|
|
|
+ if (responseBody == null) {
|
|
|
|
|
+ responseBody = "";
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Response result;
|
|
|
|
|
+ // 判断返回的字符串是否为有效的JSON格式
|
|
|
|
|
+ if (isValidJson(responseBody)) {
|
|
|
|
|
+ result = JSON.parseObject(responseBody, responseClass);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ result = (Response)responseBody;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 构建返回的ResponseEntity
|
|
|
|
|
+ return ResponseEntity.status(rawResponse.getStatusCode()).headers(rawResponse.getHeaders()).body(result);
|
|
|
|
|
+ } catch (WebClientResponseException e) {
|
|
|
|
|
+ // 如果是WebClientResponseException,记录详细信息
|
|
|
|
|
+ log.error("WebClient请求失败,状态码: {}, 响应头: {}", e.getStatusCode(), e.getHeaders(), e);
|
|
|
|
|
+ throw e;
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ // 处理其他异常(修复NPE)
|
|
|
|
|
+ log.error("请求失败", e);
|
|
|
|
|
+
|
|
|
|
|
+ // 核心修复:e.getMessage() 可能为 null,必须判空
|
|
|
|
|
+ String errorMsg = e.getMessage();
|
|
|
|
|
+ if (errorMsg == null) {
|
|
|
|
|
+ errorMsg = "网络请求超时或服务端无响应";
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ throw new WebClientResponseException(
|
|
|
|
|
+ 500,
|
|
|
|
|
+ "Request failed: " + errorMsg,
|
|
|
|
|
+ HttpHeaders.EMPTY,
|
|
|
|
|
+ errorMsg.getBytes(StandardCharsets.UTF_8),
|
|
|
|
|
+ null
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 构造post请求
|
|
* 构造post请求
|
|
|
*
|
|
*
|