当前位置: 首页 > 知识库问答 >
问题:

如何将微服务的招摇过市聚合为一个招摇过市

凤自珍
2023-03-14

我试图在我的微服务项目中生成一个单独的招摇过市,在Api网关中将所有服务招摇过市聚合成一个单独的招摇过市。为了实现这一点,我将遵循下一个教程https://objectpartners.com/2017/09/28/aggregate-services-into-a-single-swagger

这里的问题是,当我尝试设置绝对URL时,我收到的输出是未能加载API定义。未定义的http://localhost:8070/apihttp://localhost:8081/api/v2/api-docs其中localhost:8070/api是api网关的基本URL,localhost:8081/api/v2/api-docs是微服务招摇过市的docs URL。

这是我的代码:

大摇大摆

package com.rfd.apigateway.swagger;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Configuration
@ConfigurationProperties(prefix = "swagger")
public class SwaggerConfiguration {

    private List<Resource> resources;

    public List<Resource> getResources() {
        return resources;
    }

    public void setResources(List<Resource> resources) {
        this.resources = resources;
    }
}

资源

package com.rfd.apigateway.swagger;

public class Resource {
    private String name;
    private String url;
    private String version;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }
}

文档管理员

package com.rfd.apigateway.swagger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;

import java.util.ArrayList;
import java.util.List;

@Component
@Primary
@EnableAutoConfiguration
public class DocumentationController implements SwaggerResourcesProvider {

    private SwaggerConfiguration swaggerConfiguration;

    @Autowired
    public DocumentationController(SwaggerConfiguration swaggerConfiguration){
        this.swaggerConfiguration = swaggerConfiguration;
    }

    @Override
    public List get() {
        List resources = new ArrayList<>();
        for(Resource resource : this.swaggerConfiguration.getResources()){
            resources.add(createSwaggerResource(resource));
        }

        return resources;
    }

    private SwaggerResource createSwaggerResource(Resource resource) {
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName(resource.getName());
        swaggerResource.setUrl(resource.getUrl());
        swaggerResource.setSwaggerVersion(resource.getVersion());
        return swaggerResource;
    }
}

最后是应用程序。yml

swagger:
  resources:
    - name: transactions
      url: http://localhost:8081/api/v2/api-docs
      version: 1.0
    - name: payments
      url: http://localhost:8083/api/v2/api-docs
      version: 1.0

以及一些有助于理解问题的图片:

共有2个答案

凌征
2023-03-14

我通过以下方法解决了这个问题:https://github.com/varghgeorge/microservices-single-swagger

这个简单的sprintboot微服务可以在一个地方显示您所有的炫耀文档。基于YAML配置,它将显示服务列表,并为所有服务提供单个文档服务器。在YAML配置中,可以添加不同的招摇过市URL。

公西马鲁
2023-03-14

这里的问题只是springfox版本。。。我试着把它从2.8.0降到2.7.0,效果很好。这似乎是一个公认的错误,你可以在这里看到:https://github.com/springfox/springfox/issues/2235

我还必须在微服务中启用cors,但这是另一个问题。

 类似资料:
  • 我的pom.xml 招摇过市配置 服务器日志 它说映射: 但这些都不起作用(404): 如果我使用sping-fox较低版本,那么我将在我的日志中得到它已映射{[/v2/api-docs}],方法=[GET]。但是,我看不到在那里生成的任何json。

  • 我正在使用Swagger注释和SpringFox为我的REST API(使用Sprint Boot构建)生成Swagger规范。我正在用将返回的代码注释每个方法。例如: 然而,有些东西(我假设SpringFox)正在向每个API调用添加一个200响应代码,而不管它是否已定义。我知道我可以通过在每个方法中添加注释来删除此项,但a)这似乎是@ApiResponse定义的不必要重复,b)某些方法可能返回

  • 我正在使用swagger doc为我的应用程序生成API。doc是用yml编写的,在某些地方它将定义一些枚举道具(我们使用mysql)。这看起来像: 我希望得到这样的东西: 正如您所看到的,类型字段将是一个在配置文件中定义的字符串,但我收到的是这个字符串: Swagger将第一个值设置为数据类型,这是绝对错误的。所以问题是如何为“type”字段获取值“string”。

  • 我对使用SpringBoot和Springfox-boot-starter的swagger文档有一个问题。 我使用java.time.Instant java.util.Optio包裹 有没有办法让这个工作与可选的?感谢任何建议! Spring启动版本: Springfox-boot-starter版本

  • 已安装Java版本8更新271。 从这个链接下载了swagger-codemen-cli版本2.4.17 当我运行命令生成时,我得到以下问题 我必须使用这个JSON,但我也测试了这个样本JSON 对于2.4.7 rc1,我得到以下错误: 试着一步一步地找到答案。没找到。 任何指针都是有用的 尚卡尔

  • 我试图通过Swagger UI记录在供应商产品(WSO2 ESB)中开发的现有API服务,以供公司内部使用。供应商产品不支持招摇过市。我计划以编程方式检查/处理API服务的源代码(编写在供应商产品中),并在中生成一个包含swagger定义文件的目录/文件夹/库。json或。yml格式。那很好,我能做到。 这些api定义文件中的每一个都将在swagger UI中很好地呈现,我正在考虑使用https: