xuqiang 4 ヶ月 前
親
コミット
1d56eb660e

+ 73 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

@@ -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请求
      *