代码之家  ›  专栏  ›  技术社区  ›  Ruslan

无法构造“reactor”的实例。果心出版商Mono ` Spring Cloud OpenFeign和Spring boot 2

  •  2
  • Ruslan  · 技术社区  · 6 年前

    球门 :从Spring Boot 1迁移。x(webMvc)到版本2(webFlux),Spring Cloud Edgware SR2到FinchleyM8(等待发布版本)。

    问题 :外国->OpenFeign。引擎盖下的OpenFeign使用RxJava,但使用WebFlux-Reactor3。当前使用Mono作为返回类型时,我遇到了一个错误:

    原因:组织。springframework。http。转换器。HttpMessageConversionException:类型定义错误:[简单类型,类reactor.core.publisher.Mono];嵌套异常为com。fasterxml。杰克逊。数据绑定。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
    }
    

    问题 : 我是否需要创建自己的单声道到单声道转换器,或者这是spring cloud starter openfeign的一些问题,所有这些都应该可以在OOTB中工作?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Aditya Patnaik    3 年前

    这个 reactor.core.publisher.Mono 属于 spring-boot-starter-webflux 罐子

    从获取其最新版本 mvn repository

    然后将其添加到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>-->
    

    这解决了问题!

        2
  •  0
  •   Ruslan    6 年前

    您可以使用这些方法来适应:

    对于单个rxJavaSingle

    单声道。from(RxReactiveStreams.toPublisher(rxJavaSingle))

    对于Completable rxJavaCompletable 单声道。from(RxReactiveStreams.toPublisher(rxJavaCompletable))