Goal:从 Spring Boot 1.x (webMvc) 迁移到版本 2 (webFlux),从 Spring Cloud Edgware SR2 迁移到 FinchleyM8(等待发布版本)。
Problem:Feign -> OpenFeign。 OpenFeign 底层使用 RxJava,但使用 WebFlux - Reactor3。目前,当我使用 Mono 作为返回类型时,出现错误:
引起原因:org.springframework.http.converter.HttpMessageConversionException:类型定义错误:[简单类型,类reactor.core.publisher.Mono];嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例reactor.core.publisher.Mono
(不存在像默认构造那样的创建者):抽象类型需要映射到具体类型,具有自定义反序列化器,或者包含附加类型信息
代码示例:
@FeignClient(name = "thirdpartyresource", url = "${third.party.resource.url}")
public interface ThirdPartyResource {
@PostMapping(value = "/validate", consumes = APPLICATION_FORM_URLENCODED_VALUE)
Mono<ValidationResultDto> validate(MultiValueMap multiValueMap); // WORKS BAD
// Single<ValidationResultDto> validate(MultiValueMap multiValueMap); WORKS WELL
}
Question:
我是否需要创建自己的 Single 到 Mono 转换器,还是 spring-cloud-starter-openfeign 的一些问题,并且所有的都应该可以工作 OOTB?
The reactor.core.publisher.Mono
属于spring-boot-starter-webflux
jar.
从以下位置获取它的最新版本Maven 存储库 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-webflux.
然后将其添加到您的 pom.xml 中
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>2.5.3</version>
</dependency>
还要删除spring-boot-starter-web
从你的 pom.xml 中,以防万一你有它。
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>-->
这解决了问题!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)