当前使用版本(必填,否则不予处理)
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 传递