diff --git a/pom.xml b/pom.xml
index d86f6f4..7428a99 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,19 +19,19 @@
com.inspect.simulator.InspectSimulatorApplication
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
- org.springframework.boot
- spring-boot-starter-web
-
+
+ org.springframework.boot
+ spring-boot-starter-web
+
org.springframework.cloud
spring-cloud-starter-bootstrap
@@ -43,24 +43,24 @@
${nacos.client.version}
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-discovery
- ${spring.cloud.alibaba.version}
-
-
- com.alibaba.nacos
- nacos-api
-
-
- com.alibaba.nacos
- nacos-client
-
-
- com.alibaba.nacos
- nacos-common
-
-
-
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+ ${spring.cloud.alibaba.version}
+
+
+ com.alibaba.nacos
+ nacos-api
+
+
+ com.alibaba.nacos
+ nacos-client
+
+
+ com.alibaba.nacos
+ nacos-common
+
+
+
org.springframework.cloud
spring-cloud-dependencies
@@ -68,21 +68,21 @@
pom
import
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-config
- ${spring.cloud.alibaba.version}
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-sentinel
- ${spring.cloud.alibaba.version}
-
-
- com.alibaba.cloud
- spring-cloud-alibaba-sentinel-gateway
- ${spring.cloud.alibaba.version}
-
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+ ${spring.cloud.alibaba.version}
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+ ${spring.cloud.alibaba.version}
+
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-sentinel-gateway
+ ${spring.cloud.alibaba.version}
+
org.springframework.boot
@@ -171,11 +171,11 @@
1.0.0
compile
-
-
-
-
-
+
+
+
+
+
org.springframework.boot
@@ -245,7 +245,6 @@
-
org.openpnp
@@ -279,6 +278,12 @@
2.11.0
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
+
diff --git a/src/main/java/com/inspect/simulator/utils/http/WebClientConfig.java b/src/main/java/com/inspect/simulator/utils/http/WebClientConfig.java
new file mode 100644
index 0000000..9f94323
--- /dev/null
+++ b/src/main/java/com/inspect/simulator/utils/http/WebClientConfig.java
@@ -0,0 +1,25 @@
+package com.inspect.simulator.utils.http;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.reactive.ReactorClientHttpConnector;
+import org.springframework.web.reactive.function.client.WebClient;
+import reactor.netty.http.client.HttpClient;
+
+import java.time.Duration;
+
+@Configuration
+public class WebClientConfig {
+
+ @Bean
+ public WebClient webClient() {
+ // 配置 HttpClient:连接超时、响应超时
+ HttpClient httpClient = HttpClient.create()
+ .responseTimeout(Duration.ofSeconds(30)); // 响应超时
+
+ return WebClient.builder()
+ .clientConnector(new ReactorClientHttpConnector(httpClient))
+ .codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(1024 * 1024 * 10)) // 设置最大内存限制为10MB
+ .build();
+ }
+}
diff --git a/src/main/java/com/inspect/simulator/utils/http/WebClientUtil.java b/src/main/java/com/inspect/simulator/utils/http/WebClientUtil.java
new file mode 100644
index 0000000..1fc21fd
--- /dev/null
+++ b/src/main/java/com/inspect/simulator/utils/http/WebClientUtil.java
@@ -0,0 +1,101 @@
+package com.inspect.simulator.utils.http;
+
+import com.alibaba.fastjson.JSONObject;
+import com.inspect.simulator.constant.Color;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Service;
+import org.springframework.web.reactive.function.client.WebClient;
+
+import java.util.Map;
+
+@Slf4j
+@Service
+public class WebClientUtil {
+
+ @Autowired
+ private WebClient webClient;
+
+ public WebClient.RequestBodySpec http(HttpMethod httpMethod, String uri) {
+ log.info(Color.MAGENTA + "[WebClient] address: {} " + Color.END, uri);
+ assert StringUtils.isNotBlank(uri);
+ assert webClient != null;
+ return webClient.method(httpMethod).uri(uri);
+ }
+
+ public T get(String uri, Class clazz, Map headerMap) {
+ JSONObject result = http(HttpMethod.GET, uri)
+ .headers(httpHeaders -> {
+ headerMap.forEach((k, v) -> {
+ httpHeaders.add(k, v);
+ });
+ })
+ .retrieve()
+ .bodyToMono(JSONObject.class)
+ .block();
+ log.info("[WebClient] get, RES:{}", result.toJSONString());
+ return this.checkResultCodeAndConvertResult(uri, result, clazz);
+ }
+
+ public T getJson(String uri, Class clazz) {
+ JSONObject result = http(HttpMethod.GET, uri)
+ .contentType(MediaType.APPLICATION_JSON).retrieve().bodyToMono(JSONObject.class).block();
+ log.info("[WebClient] getJson, RES:{}", result.toJSONString());
+ return this.checkResultCodeAndConvertResult(uri, result, clazz);
+ }
+
+ public JSONObject getResultJson(String uri) {
+ JSONObject result = http(HttpMethod.GET, uri)
+ .retrieve()
+ .bodyToMono(JSONObject.class)
+ .block();
+
+ return result;
+ }
+
+ public T putJson(Object requestParam, String uri, Class clazz) {
+ JSONObject t = http(HttpMethod.PUT, uri)
+ .contentType(MediaType.APPLICATION_JSON)
+ .bodyValue(requestParam)
+ .retrieve()
+ .bodyToMono(JSONObject.class)
+ .block();
+
+ log.debug("[WebClient] putJson, PARAM: {}, RES: {}", JSONObject.toJSONString(requestParam), t.toJSONString());
+ return checkResultCodeAndConvertResult(uri, t, clazz);
+ }
+
+ public T postJson(Object requestParam, String uri, Class clazz, Map headerMap) {
+ JSONObject result = http(HttpMethod.POST, uri)
+ .contentType(MediaType.APPLICATION_JSON)
+ .headers(httpHeaders -> {
+ headerMap.forEach((k, v) -> {
+ httpHeaders.add(k, v);
+ });
+ })
+ .bodyValue(requestParam).retrieve()
+ .bodyToMono(JSONObject.class)
+ .block();
+ log.info("[WebClient] postJson, PARAM:{}, RES:{}", JSONObject.toJSONString(requestParam), result.toJSONString());
+ return checkResultCodeAndConvertResult(uri, result, clazz);
+ }
+
+ public T delete(String uri, Class clazz) {
+ JSONObject result = http(HttpMethod.DELETE, uri)
+ .contentType(MediaType.APPLICATION_FORM_URLENCODED)
+ .retrieve()
+ .bodyToMono(JSONObject.class)
+ .block();
+ return checkResultCodeAndConvertResult(uri, result, clazz);
+ }
+
+ private T checkResultCodeAndConvertResult(final String uri, JSONObject result, Class clazz) {
+ log.info("CHECK_RET, URI: {}, RES: {}", uri, result.toJSONString());
+
+ return result.toJavaObject(clazz);
+ }
+
+}