From b8d62de41ff7e1e0549061308aa11f68cf881ed9 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期三, 16 七月 2025 17:01:20 +0800 Subject: [PATCH] 修改所有的controller --- se-gateway/src/main/java/com/terra/gateway/config/SpringDocConfig.java | 94 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 94 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..fd3c3d0 --- /dev/null +++ b/se-gateway/src/main/java/com/terra/gateway/config/SpringDocConfig.java @@ -0,0 +1,94 @@ +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