|
|
@@ -0,0 +1,88 @@
|
|
|
+package com.jzg.quotation.summary.utils;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.fasterxml.jackson.core.JsonParser;
|
|
|
+import com.fasterxml.jackson.databind.*;
|
|
|
+import com.fasterxml.jackson.databind.module.SimpleModule;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
|
|
+import org.springframework.beans.factory.ObjectFactory;
|
|
|
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
|
|
|
+import org.springframework.cloud.openfeign.support.SpringDecoder;
|
|
|
+import org.springframework.context.annotation.Bean;
|
|
|
+import org.springframework.context.annotation.Configuration;
|
|
|
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * 类描述:
|
|
|
+ *
|
|
|
+ * @author Administrator
|
|
|
+ * @version 1.0
|
|
|
+ * @date 2026/3/21 10:09
|
|
|
+ */
|
|
|
+// 1. 创建配置文件
|
|
|
+@Configuration
|
|
|
+public class FeignConfig {
|
|
|
+ @Bean
|
|
|
+ public ObjectMapper objectMapper() {
|
|
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
|
+
|
|
|
+ // 注册 Java 8 时间模块
|
|
|
+ mapper.registerModule(new JavaTimeModule());
|
|
|
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
|
|
+
|
|
|
+ // 注册 IPage 反序列化器
|
|
|
+ SimpleModule module = new SimpleModule();
|
|
|
+ module.addDeserializer(IPage.class, new JsonDeserializer<IPage<?>>() {
|
|
|
+ @Override
|
|
|
+ public IPage<?> deserialize(JsonParser p, DeserializationContext ctxt)
|
|
|
+ throws IOException {
|
|
|
+ ObjectMapper mapper = (ObjectMapper) p.getCodec();
|
|
|
+ JsonNode node = mapper.readTree(p);
|
|
|
+
|
|
|
+ Page<Object> page = new Page<>();
|
|
|
+
|
|
|
+ if (node.has("records") && node.get("records").isArray()) {
|
|
|
+ List<Object> records = new ArrayList<>();
|
|
|
+ for (JsonNode item : node.get("records")) {
|
|
|
+ records.add(mapper.treeToValue(item, Object.class));
|
|
|
+ }
|
|
|
+ page.setRecords(records);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (node.has("total")) {
|
|
|
+ page.setTotal(node.get("total").asLong());
|
|
|
+ }
|
|
|
+ if (node.has("size")) {
|
|
|
+ page.setSize(node.get("size").asLong());
|
|
|
+ }
|
|
|
+ if (node.has("current")) {
|
|
|
+ page.setCurrent(node.get("current").asLong());
|
|
|
+ }
|
|
|
+ if (node.has("pages")) {
|
|
|
+ page.setPages(node.get("pages").asLong());
|
|
|
+ }
|
|
|
+
|
|
|
+ return page;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ mapper.registerModule(module);
|
|
|
+ return mapper;
|
|
|
+ }
|
|
|
+ @Bean
|
|
|
+ public SpringDecoder feignDecoder(ObjectMapper objectMapper) {
|
|
|
+ // 使用 Spring 的 HttpMessageConverter
|
|
|
+ MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
|
|
|
+ converter.setObjectMapper(objectMapper);
|
|
|
+
|
|
|
+ ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(converter);
|
|
|
+ return new SpringDecoder(objectFactory);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|