From 7d03fd7d726469278b5bd1b379f0303fa55b7c3e Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期四, 17 七月 2025 11:13:32 +0800
Subject: [PATCH] 解决API调试出错

---
 se-gateway/src/main/java/com/terra/gateway/config/SpringDocConfig.java |   92 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 92 insertions(+), 0 deletions(-)

diff --git a/se-gateway/src/main/java/com/terra/gateway/config/SpringDocConfig.java b/se-gateway/src/main/java/com/terra/gateway/config/SpringDocConfig.java
new file mode 100644
index 0000000..f5832b3
--- /dev/null
+++ b/se-gateway/src/main/java/com/terra/gateway/config/SpringDocConfig.java
@@ -0,0 +1,92 @@
+package com.terra.gateway.config;
+
+import com.alibaba.nacos.client.naming.event.InstancesChangeEvent;
+import com.alibaba.nacos.common.notify.Event;
+import com.alibaba.nacos.common.notify.NotifyCenter;
+import com.alibaba.nacos.common.notify.listener.Subscriber;
+import com.terra.gateway.utils.StringUtils;
+import org.springdoc.core.AbstractSwaggerUiConfigProperties;
+import org.springdoc.core.SwaggerUiConfigProperties;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * SpringDoc閰嶇疆绫�
+ *
+ * @author admin
+ */
+@Configuration(proxyBeanMethods = false)
+@ConditionalOnProperty(value = "springdoc.api-docs.enabled", matchIfMissing = true)
+public class SpringDocConfig implements InitializingBean
+{
+    @Autowired
+    private SwaggerUiConfigProperties swaggerUiConfigProperties;
+
+    @Autowired
+    private DiscoveryClient discoveryClient;
+
+    /**
+     * 鍦ㄥ垵濮嬪寲鍚庤皟鐢ㄧ殑鏂规硶
+     */
+    @Override
+    public void afterPropertiesSet()
+    {
+        NotifyCenter.registerSubscriber(new SwaggerDocRegister(swaggerUiConfigProperties, discoveryClient));
+    }
+}
+
+/**
+ * Swagger鏂囨。娉ㄥ唽鍣�
+ */
+class SwaggerDocRegister extends Subscriber<InstancesChangeEvent> {
+    @Autowired
+    private SwaggerUiConfigProperties swaggerUiConfigProperties;
+
+    @Autowired
+    private DiscoveryClient discoveryClient;
+
+    private final static String[] EXCLUDE_ROUTES = new String[]{"se-gateway"};
+
+    public SwaggerDocRegister(SwaggerUiConfigProperties swaggerUiConfigProperties, DiscoveryClient discoveryClient) {
+        this.swaggerUiConfigProperties = swaggerUiConfigProperties;
+        this.discoveryClient = discoveryClient;
+    }
+
+    /**
+     * 浜嬩欢鍥炶皟鏂规硶锛屽鐞咺nstancesChangeEvent浜嬩欢
+     *
+     * @param event 浜嬩欢瀵硅薄
+     */
+    @Override
+    public void onEvent(InstancesChangeEvent event) {
+        Set<AbstractSwaggerUiConfigProperties.SwaggerUrl> swaggerUrlSet = discoveryClient.getServices()
+                .stream()
+                .flatMap(serviceId -> discoveryClient.getInstances(serviceId).stream())
+                .filter(instance -> !StringUtils.equalsAnyIgnoreCase(instance.getServiceId(), EXCLUDE_ROUTES))
+                .map(instance -> {
+                    AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl = new AbstractSwaggerUiConfigProperties.SwaggerUrl();
+                    swaggerUrl.setName(instance.getServiceId());
+                    swaggerUrl.setUrl(String.format("/%s/v3/api-docs", instance.getServiceId()));
+                    return swaggerUrl;
+                })
+                .collect(Collectors.toSet());
+
+        swaggerUiConfigProperties.setUrls(swaggerUrlSet);
+    }
+
+    /**
+     * 璁㈤槄绫诲瀷鏂规硶锛岃繑鍥炶闃呯殑浜嬩欢绫诲瀷
+     *
+     * @return 璁㈤槄鐨勪簨浠剁被鍨�
+     */
+    @Override
+    public Class<? extends Event> subscribeType() {
+        return InstancesChangeEvent.class;
+    }
+}

--
Gitblit v1.9.3