当前使用版本(必须填写清楚,否则不予处理)
3.1.1
该问题是怎么引起的?(最新版上已修复的会直接close掉)
因为IPage是接口无法反序列化,改用Page,但是反序列化失败
重现步骤
通过Feign访问返回Page数据的接口
R
报错信息
com.netflix.hystrix.exception.HystrixRuntimeException: IHouseBaseinfoClient#list(HouseBaseinfoQueryVO) failed and encountered unrecoverable error. at com.netflix.hystrix.AbstractCommand.getFallbackOrThrowException(AbstractCommand.java:772) at com.netflix.hystrix.AbstractCommand.handleFailureViaFallback(AbstractCommand.java:1034) at com.netflix.hystrix.AbstractCommand.access$700(AbstractCommand.java:60) at com.netflix.hystrix.AbstractCommand$12.call(AbstractCommand.java:621) at com.netflix.hystrix.AbstractCommand$12.call(AbstractCommand.java:601) at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$4.onError(OperatorOnErrorResumeNextViaFunction.java:140) at rx.internal.operators.OnSubscribeDoOnEach$DoOnEachSubscriber.onError(OnSubscribeDoOnEach.java:87) at rx.internal.operators.OnSubscribeDoOnEach$DoOnEachSubscriber.onError(OnSubscribeDoOnEach.java:87) at com.netflix.hystrix.AbstractCommand$HystrixObservableTimeoutOperator$3.onError(AbstractCommand.java:1194) at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.onError(OperatorSubscribeOn.java:80) at rx.observers.Subscribers$5.onError(Subscribers.java:230) at rx.internal.operators.OnSubscribeDoOnEach$DoOnEachSubscriber.onError(OnSubscribeDoOnEach.java:87) at rx.observers.Subscribers$5.onError(Subscribers.java:230) at com.netflix.hystrix.AbstractCommand$DeprecatedOnRunHookApplication$1.onError(AbstractCommand.java:1431) at com.netflix.hystrix.AbstractCommand$ExecutionHookApplication$1.onError(AbstractCommand.java:1362) at rx.observers.Subscribers$5.onError(Subscribers.java:230) at rx.observers.Subscribers$5.onError(Subscribers.java:230) at rx.internal.operators.OnSubscribeThrow.call(OnSubscribeThrow.java:44) at rx.internal.operators.OnSubscribeThrow.call(OnSubscribeThrow.java:28) at rx.Observable.unsafeSubscribe(Observable.java:10327) at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51) at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) at rx.Observable.unsafeSubscribe(Observable.java:10327) at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51) at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) at rx.Observable.unsafeSubscribe(Observable.java:10327) at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41) at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30) at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) at rx.Observable.unsafeSubscribe(Observable.java:10327) at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.call(OperatorSubscribeOn.java:100) at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:56) at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:47) at org.springblade.core.cloud.hystrix.BladeHttpHeadersCallable.call(BladeHttpHeadersCallable.java:50) at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction.call(HystrixContexSchedulerAction.java:69) at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) at java.util.concurrent.FutureTask.run(FutureTask.java) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.Exception: Throwable caught while executing. at com.netflix.hystrix.AbstractCommand.getExceptionFromThrowable(AbstractCommand.java:1976) at com.netflix.hystrix.AbstractCommand.wrapWithOnExecutionErrorHook(AbstractCommand.java:1490) at com.netflix.hystrix.AbstractCommand.access$1300(AbstractCommand.java:60) at com.netflix.hystrix.AbstractCommand$ExecutionHookApplication$1.onError(AbstractCommand.java:1361) ... 34 common frames omitted Caused by: java.lang.IncompatibleClassChangeError: Found class com.baomidou.mybatisplus.extension.plugins.pagination.Page, but interface was expected at com.baomidou.mybatisplus.extension.plugins.pagination.Page$Access4JacksonDeserializer0f560ba0.longSetter(com/baomidou/mybatisplus/extension/plugins/pagination/Page$Access4JacksonDeserializer.java) at com.fasterxml.jackson.module.afterburner.deser.SettableLongMethodProperty.deserializeAndSet(SettableLongMethodProperty.java:42) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:252) at com.fasterxml.jackson.module.afterburner.deser.SuperSonicBeanDeserializer.deserializeFromObject(SuperSonicBeanDeserializer.java:291) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159) at com.fasterxml.jackson.module.afterburner.deser.SuperSonicBeanDeserializer.deserialize(SuperSonicBeanDeserializer.java:116) at com.fasterxml.jackson.module.afterburner.deser.SettableObjectMethodProperty.deserializeAndSet(SettableObjectMethodProperty.java:47) at com.fasterxml.jackson.module.afterburner.deser.SuperSonicBeanDeserializer.deserializeFromObject(SuperSonicBeanDeserializer.java:295) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159) at com.fasterxml.jackson.module.afterburner.deser.SuperSonicBeanDeserializer.deserialize(SuperSonicBeanDeserializer.java:116) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3084) at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:239) at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:227) at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:102) at org.springframework.cloud.openfeign.support.SpringDecoder.decode(SpringDecoder.java:59) at org.springframework.cloud.openfeign.support.ResponseEntityDecoder.decode(ResponseEntityDecoder.java:62) at feign.optionals.OptionalDecoder.decode(OptionalDecoder.java:36) at feign.SynchronousMethodHandler.decode(SynchronousMethodHandler.java:176) at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:140) at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:78) at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:106) at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302) at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298) at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46) ... 28 common frames omitted
Comment From: buliugu
经过调试后发现似乎问题出在pages
Comment From: miemieYaho
别人能用page直接接收,你用R再包了page,自己排查
Comment From: wxdfun
重写setPages 加上JsonIgnore
Comment From: johnxiaohe
不用R用page直接返回也报错 会提示说期望是个类返回的是个接口 为啥呀
Comment From: LiYeLin
解决了吗?怎么被关闭了 我也碰见了一样的问题
Comment From: LiYeLin
也是因为Ipage的问题换成了Page 然后就出现这个问题 最后只能使用List了
Comment From: johnxiaohe
也是因为Ipage的问题换成了Page 然后就出现这个问题 最后只能使用List了
使用包装类,最后使用wraper转回来
Comment From: LiYeLin
https://mp.baomidou.com/guide/wrapper.html 这个里面说了不赞成rpc传输Wrapper啊
也是因为Ipage的问题换成了Page 然后就出现这个问题 最后只能使用List了
使用包装类,最后使用wraper转回来
Comment From: johnxiaohe
https://mp.baomidou.com/guide/wrapper.html 这个里面说了不赞成rpc传输Wrapper啊
也是因为Ipage的问题换成了Page 然后就出现这个问题 最后只能使用List了
使用包装类,最后使用wraper转回来
我的意思你搞个转换类,自定义一个类存放这些分页和结果信息的类。用转换类转换一下传输回去。再转回到IPage
Comment From: LiYeLin
https://mp.baomidou.com/guide/wrapper.html 这个里面说了不赞成rpc传输Wrapper啊
也是因为Ipage的问题换成了Page 然后就出现这个问题 最后只能使用List了
使用包装类,最后使用wraper转回来
我的意思你搞个转换类,自定义一个类存放这些分页和结果信息的类。用转换类转换一下传输回去。再转回到IPage
懂了,我现在用了Map来传递那些分页信息和结果信息,其实和你说的转换类一个道理,但我想了一下好像还是你说的新写个类比较方便以后维护。
Comment From: LiYeLin
https://mp.baomidou.com/guide/wrapper.html 这个里面说了不赞成rpc传输Wrapper啊
也是因为Ipage的问题换成了Page 然后就出现这个问题 最后只能使用List了
使用包装类,最后使用wraper转回来
我的意思你搞个转换类,自定义一个类存放这些分页和结果信息的类。用转换类转换一下传输回去。再转回到IPage
肥肠感谢!!!