调用feign返回IPage对象时,会报错误Cannot construct instance of com.baomidou.mybatisplus.core.metadata.IPage,主要思路就是将IPage对象转换为Page对象,解决方案如下:
public class IPageDeserializerConfig extends StdDeserializer<IPage> {
protected IPageDeserializerConfig(Class<?> vc) {
super(vc);
}
@Override
public IPage deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
JsonNode node = p.getCodec().readTree(p);
String s = node.toString();
ObjectMapper om = new ObjectMapper();
Page page = om.readValue(s, Page.class);
return page;
}
}
@Configuration
public class WebDataConvertConfig extends WebMvcConfigurationSupport {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(mappingJackson2HttpMessageConverter());
super.configureMessageConverters(converters);
}
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
SimpleModule module = new SimpleModule();
module.addDeserializer(IPage.class, new IPageDeserializerConfig(IPage.class));
mapper.registerModule(module);
converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON_UTF8, MediaType.APPLICATION_OCTET_STREAM));
converter.setObjectMapper(mapper);
return converter;
}
}