【发布时间】:2020-04-07 05:59:31
【问题描述】:
我有以下控制器
@RestController
public void MyController {
@GetMapping("/foo")
public Flux<Foo> getFoos() { /* return a flux of Foos*/ }
}
还有一个 Feign 客户端
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出 [来源:(BufferedReader)处的 START_ARRAY 令牌;行:1,列:1] 阅读 GET http://localhost:8080/foo))在 reactor.test.ErrorFormatter.assertionError(ErrorFormatter.java:105) 在 reactor.test.ErrorFormatter.failPrefix(ErrorFormatter.java:94) 在 reactor.test.ErrorFormatter.fail(ErrorFormatter.java:64) 在 reactor.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) 在 reactor.core.publisher.Flux.subscribe(Flux.java:7777) 在 reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.run(FluxSubscribeOn.java:194) 在 reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84) 在 reactor.core.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出 [来源:(BufferedReader)处的 START_ARRAY 令牌;行:1,列:1] 阅读 GET http://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出 [来源:(BufferedReader)处的 START_ARRAY 令牌;行: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