反应堆伪装不能反序列化通量响应

问题描述 投票:0回答:1

我有以下控制器

@RestController
public void MyController {
  @GetMapping("/foo")
  public Flux<Foo> getFoos() { /* return a flux of Foos*/ }
}

和一个假客户

public interface MyFeignClient {
  @RequestLine("GET /foo")
  Mono<Foo> getFoos();
}

public class MyClients {
  public static MyFeignClient myFeignClient() {
    return ReactorFeign.builder().target(MyFeignClient.class, "http://localhost:8080");
  }
}

但是当我打电话时

StepVerifier.create(myFeignClient.foo())
  .consumeNextWith(foo -> println(foo))
  .verifyCompleted();

我收到此错误

java.lang.AssertionError:期望“ consumeNextWith”失败(预期:onNext();实际:onError(feign.FeignException:无法反序列化的实例com.example.Foo个START_ARRAY令牌位于[来源:(BufferedReader);行:1,列:1]阅读GEThttp://localhost:8080/foo))

在Reactor.test.ErrorFormatter.assertionError(ErrorFormatter.java:105)在反应堆.test.ErrorFormatter.failPrefix(ErrorFormatter.java:94)在反应器.test.ErrorFormatter.fail(ErrorFormatter.java:64)在反应器.test.ErrorFormatter.failOptional(ErrorFormatter.java:79)在Reactor.test.DefaultStepVerifierBuilder.lambda $ consumeNextWith $ 1(DefaultStepVerifierBuilder.java:256)在Reactor.test.DefaultStepVerifierBuilder $ SignalEvent.test(DefaultStepVerifierBuilder.java:2112)在Reactor.test.DefaultStepVerifierBuilder $ DefaultVerifySubscriber.onSignal(DefaultStepVerifierBuilder.java:1408)在Reactor.test.DefaultStepVerifierBuilder $ DefaultVerifySubscriber.onExpectation(DefaultStepVerifierBuilder.java:1356)在Reactor.test.DefaultStepVerifierBuilder $ DefaultVerifySubscriber.onError(DefaultStepVerifierBuilder.java:1030)在Reactor.core.publisher.FluxTake $ TakeSubscriber.onError(FluxTake.java:138)在Reactor.core.publisher.FluxSubscribeOn $ SubscribeOnSubscriber.onError(FluxSubscribeOn.java:157)在feign.reactive.ReactiveInvocationHandler $ 1.request(ReactiveInvocationHandler.java:115)在Reactor.core.publisher.FluxSubscribeOn $ SubscribeOnSubscriber.requestUpstream(FluxSubscribeOn.java:131)在Reactor.core.publisher.FluxSubscribeOn $ SubscribeOnSubscriber.onSubscribe(FluxSubscribeOn.java:124)在feign.reactive.ReactiveInvocationHandler.lambda $ invokeMethod $ 0(ReactiveInvocationHandler.java:99)在reactor.core.publisher.FluxSource.subscribe(FluxSource.java:52)在react..core.publisher.Flux.subscribe(Flux.java:7777)处Reactor.core.publisher.FluxSubscribeOn $ SubscribeOnSubscriber.run(FluxSubscribeOn.java:194)在react..core.scheduler.WorkerTask.call(WorkerTask.java:84)在反应器。核心.scheduler.WorkerTask.call(WorkerTask.java:37)在java.base / java.util.concurrent.FutureTask.run(FutureTask.java:264)在java.base / java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)在java.base / java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)在java.base / java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:628)在java.base / java.lang.Thread.run(Thread.java:834)禁止显示:feign.FeignException:无法反序列化的实例com.example.Foo个START_ARRAY令牌位于[来源:(BufferedReader);行:1,列:1]阅读GEThttp://localhost:8080/foo位于feign.FeignException.errorReading(FeignException.java:130)在feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:162)在feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:80)在feign.reactive.ReactiveInvocationHandler $ 1.request(ReactiveInvocationHandler.java:109)... 13更多原因:com.fasterxml.jackson.databind.exc.MismatchedInputException:无法反序列化的实例com.example.Foo个START_ARRAY令牌位于[来源:(BufferedReader);行:1,列:1]在com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)在com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1343)在com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1139)在com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1093)在com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromArray(BeanDeserializerBase.java:1461)在com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:185)在com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:161)在com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013)在com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3063)在feign.jackson.JacksonDecoder.decode(JacksonDecoder.java:61)在feign.SynchronousMethodHandler.decode(SynchronousMethodHandler.java:183)在feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:147)... 15更多

我在这里做错了什么?我该如何解决?

json spring-webflux reactor feign
1个回答
0
投票

简单的google搜索显示,伪装客户端不支持反应式。他们有一个正在尝试创建支持的孵化项目

Add Webflux support issue

Feign core

因此回答您的问题

“我做错了什么?”

您选择使用不支持生产者/消费者的HttpClient。

“我该如何解决?”

[不使用伪装客户端,而是使用支持非阻塞操作的HttpClient,例如spring WebClient。

© www.soinside.com 2019 - 2024. All rights reserved.