当前使用版本(必填,否则不予处理)

3.3.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

使用FeignClient 客户端查询 FeignClient 服务端分页查询接口反序列化失败

/**
 * 分页查询
 *
 * @return
 */
@PostMapping(PAGE)
Page<MsgSetting> getMsgSettingPage(@RequestParam("current") Integer current,
                                   @RequestParam("size")    Integer size,
                                   @RequestBody             MsgSetting msgSetting);

重现步骤(如果有就写完整)

报错信息

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$Access4JacksonDeserializer1976249b.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.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4014) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3085) 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:178) at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:142) at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:80) at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:109) 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) ... 27 common frames omitted

Comment From: LiYeLin

蹲个回复

Comment From: zezuu

package xx.xx.plugin.feign.serialize;
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

/**
 * 对mybatis-plus的page对象解析的支持
 *
 * @author caixb
 */
public class MybatisPlusPageModule extends Module {
    @Override
    public String getModuleName() {
        return "MybatisPlusPageModule";
    }

    @Override
    public Version version() {
        return new Version(0, 1, 0, "", null, null);
    }

    @Override
    public void setupModule(SetupContext context) {
        context.setMixInAnnotations(Page.class, PageMixIn.class);
    }

    @JsonDeserialize(as = PageImpl.class)
    private interface PageMixIn {

    }

    /**
     * page的解析规则
     *
     * @param <T>
     */
    static class PageImpl<T> extends Page<T> {

        private final Page<T> delegate;

        PageImpl(@JsonProperty("records") List<T> records,
                @JsonProperty("current") int current, @JsonProperty("size") int size,
                @JsonProperty("total") long total) {
            delegate = new Page<>(current, size, total);
            delegate.setRecords(records);
        }

        /**
         * 获取排序信息,排序的字段和正反序
         *
         * @return 排序信息
         */
        @Override
        public List<OrderItem> orders() {
            return delegate.orders();
        }

        /**
         * 分页记录列表
         *
         * @return 分页对象记录列表
         */
        @JsonProperty
        @Override
        public List<T> getRecords() {
            return delegate.getRecords();
        }


        /**
         * 当前满足条件总行数
         *
         * @return 总条数
         */
        @JsonProperty
        @Override
        public long getTotal() {
            return delegate.getTotal();
        }

        /**
         * 获取每页显示条数
         *
         * @return 每页显示条数
         */
        @JsonProperty
        @Override
        public long getSize() {
            return delegate.getSize();
        }

        /**
         * 当前页,默认 1
         *
         * @return 当前页
         */
        @JsonProperty
        @Override
        public long getCurrent() {
            return delegate.getCurrent();
        }
    }

}

Comment From: qmdx

3.4.4 测试下是否可用

Comment From: qmdx

请使用版本 3.4.3.1 试试,page 对象请使用 新增 PageDTO 传递