Browse Source

feat: 新增WebClient封装

master
yinhuaiwei 4 weeks ago
parent
commit
c8497fc491
3 changed files with 182 additions and 51 deletions
  1. +56
    -51
      pom.xml
  2. +25
    -0
      src/main/java/com/inspect/simulator/utils/http/WebClientConfig.java
  3. +101
    -0
      src/main/java/com/inspect/simulator/utils/http/WebClientUtil.java

+ 56
- 51
pom.xml View File

@ -19,19 +19,19 @@
<start-class>com.inspect.simulator.InspectSimulatorApplication</start-class>
</properties>
<dependencies>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-web</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-web</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
@ -43,24 +43,24 @@
<version>${nacos.client.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-api</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-common</artifactId>
</exclusion>
</exclusions>
</dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-api</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-common</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
@ -68,21 +68,21 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${spring.cloud.alibaba.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>${spring.cloud.alibaba.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
<version>${spring.cloud.alibaba.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${spring.cloud.alibaba.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>${spring.cloud.alibaba.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
<version>${spring.cloud.alibaba.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
@ -171,11 +171,11 @@
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.data</groupId>-->
<!-- <artifactId>spring-data-redis</artifactId>-->
<!-- <version>2.7.17</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.data</groupId>-->
<!-- <artifactId>spring-data-redis</artifactId>-->
<!-- <version>2.7.17</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
@ -245,7 +245,6 @@
</dependency>
<!-- OpenCV -->
<dependency>
<groupId>org.openpnp</groupId>
@ -279,6 +278,12 @@
<version>2.11.0</version>
</dependency>
<!-- WebClient -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>


+ 25
- 0
src/main/java/com/inspect/simulator/utils/http/WebClientConfig.java View File

@ -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();
}
}

+ 101
- 0
src/main/java/com/inspect/simulator/utils/http/WebClientUtil.java View File

@ -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> T get(String uri, Class<T> clazz, Map<String, String> 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> T getJson(String uri, Class<T> 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> T putJson(Object requestParam, String uri, Class<T> 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> T postJson(Object requestParam, String uri, Class<T> clazz, Map<String, String> 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> T delete(String uri, Class<T> clazz) {
JSONObject result = http(HttpMethod.DELETE, uri)
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.retrieve()
.bodyToMono(JSONObject.class)
.block();
return checkResultCodeAndConvertResult(uri, result, clazz);
}
private <T> T checkResultCodeAndConvertResult(final String uri, JSONObject result, Class<T> clazz) {
log.info("CHECK_RET, URI: {}, RES: {}", uri, result.toJSONString());
return result.toJavaObject(clazz);
}
}

Loading…
Cancel
Save