我正在使用功能控制器将 Swagger 添加到我的 Spring Webflux 服务中。首先我收到这个错误:
描述:无法注册在类路径资源 [org/springdoc/webflux/ui/SwaggerConfig.class] 中定义的 bean“swaggerWelcome”。具有该名称的 bean 已在类路径资源 [org/springdoc/webmvc/ui/SwaggerConfig.class] 中定义,并且覆盖被禁用。
行动:
考虑重命名其中一个 bean 或通过设置 spring.main.allow-bean-definition-overriding=true 来启用覆盖
所以我将 spring.main.allow-bean-definition-overriding=true 添加到我的 application.properties 文件中。
现在我收到这个错误:
描述:
org.springdoc.webmvc.ui.SwaggerConfig 中方法 swaggerWebMvcConfigurer 的参数 1 需要一个类型为“org.springdoc.webmvc.ui.SwaggerIndexTransformer”的 bean,但无法找到。
行动:
考虑在配置中定义“org.springdoc.webmvc.ui.SwaggerIndexTransformer”类型的 bean。
Pom 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company/groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- For all mvc and web functions -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency> …
Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的 Mono:
private void getNodeDetail() {
Mono<String> mono = webClient.get()
.uri("/alfresco/api/-default-/public/alfresco/versions/1/nodes/f37b52a8-de40-414b-b64d-a958137e89e2")
.retrieve().bodyToMono(String.class);
System.out.println(mono.subscribe());
System.out.println(mono.block());
}
Run Code Online (Sandbox Code Playgroud)
问题:第一个 sysout 向我展示了reactor.core.publisher.LambdaSubscriber@77114efe
使用 block() 时的情况,它向我展示了我需要的内容(json 字符串)。但我想使用 Aysnc 方法。那么,如上所述,这是否意味着我的目标系统(在本例中为 Alfresco)不支持异步调用?subscribe()
如果不是这种情况,如何使用,就像 一样以字符串格式在控制台上打印响应block()
?
我正在尝试使用 web WebFlux 将字符串列表转换为 Java 中字符串列表的 Mono,也许很简单,但我找不到解决方案。
这是清单
List<String> lstString = new ArrayList<>();
lstString.add("Hello");
lstString.add("How");
lstString.add("are");
lstString.add("you?");
//Expected result
Mono<List<String>> lstMonoList =lstString.stream.map()....
Run Code Online (Sandbox Code Playgroud)
我尝试使用流、平面地图和地图方法,但我经常得到流()o列表的响应
有人可以帮助我吗?,提前致谢
当上游发出 nullValue 时,我们可以使用 'Mono.defualtIfEmpty()' 或 'Mono.switchIfEmpty()' 来替换 null 值。
但switchIfEmpty()
评价上游价值急切。因此我们使用 Mono.defer() 进行惰性求值。
'Mono.defualtIfEmpty()' 也是急于求值吗?像 switchIfEmpty() 一样?
如何更改 Mono.defualtIfEmpty() 来进行惰性评估?
reactive-programming project-reactor reactive spring-webflux
WebClient 是一个响应式客户端,它提供了 RestTemplate 的替代方案。据说是异步的。
但我怀疑以下代码:
WebClient.create()
.method(HttpMethod.GET)
.uri("http://localhost:8080/testApi")
.retrieve()
.bodyToMono(String.class)
Run Code Online (Sandbox Code Playgroud)
它什么都不做。没有发送任何 http 请求。好像没有触发。除非我通过 add 触发它.block()
。但它使事情不是“异步”。
另外,我所知道的是使用.subscribe()
它使事情看起来异步。
但是 WebClient 是为此设计的吗?使用 WebClient 的最佳实践是什么?
java ×2
spring-boot ×2
alfresco ×1
api-doc ×1
asynchronous ×1
openapi ×1
reactive ×1
spring ×1