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

SpringFox Docket每个控制器在spring boot中不工作

杜焕
2023-03-14

在我的spring boot应用程序中,我有多个Rest控制器,需要分别为每个控制器生成swagger。

通过使用下面的Docket config在我的spring boot应用程序类中的每个控制器,我可以下载特定于控制器的swagger,方法是转到/v2/api-docs?group=ai,其中I=1到n

但是在swagger-ui.html中,当我选择a1(/v2/api-docs?group=a1)时,它显示的路径为“/api/a1/a1”,而选择a2(/v2/api-docs?greoup=a2)时,它显示的路径是正确的,即/api/a2

我尝试在Docket中更改,路径regex到绝对,例如“api/a1”等,但这没有帮助。

@Bean
public Docket a1Api() {
    return new Docket(DocumentationType.SWAGGER_2)
    .groupName("a1")
    .apiInfo(a1Info())
    .select().apis(RequestHandlerSelectors.any())
    .paths(regex("/api/a1.*"))
    .build()
    .pathMapping("/");
}

@Bean
public Docket a2Api() {
    return new Docket(DocumentationType.SWAGGER_2)
    .groupName("a2")
    .apiInfo(a1Info())
    .select().apis(RequestHandlerSelectors.any())
    .paths(regex("/api/a2.*"))
    .build()
    .pathMapping("/");
}

private ApiInfo a1Info() {
    return new ApiInfoBuilder()
    .title("a1 Swagger 2.0")
    .description("a1")
    .license("a1")
    .version("1.0")
    .build();
}

private ApiInfo a2Info() {
    return new ApiInfoBuilder()
    .title("a2 Swagger 2.0")
    .description("a2")
    .license("a2")
    .version("1.0")
    .build();
}

Rest控制器

@RestController
@Api(tags = "A1")
@RequestMapping("/api/a1")
public class a1Controller {

        @ApiOperation(value = "a1")
        @RequestMapping(value = "", method = RequestMethod.POST)
        public a1Response invoke(@RequestBody a1Request va1Request) {
            .....;
        }
}

@RestController
@Api(tags = "An")
@RequestMapping("/api/an")
public class a1Controller {

        @ApiOperation(value = "an")
        @RequestMapping(value = "", method = RequestMethod.POST)
        public anResponse invoke(@RequestBody anRequest vanRequest) {
            .....;
        }
}

知道如何解决这个问题吗?
我使用的是springfox swagger版本2.6.1

共有1个答案

谯灿
2023-03-14

您可以使用以下Swagger配置添加多个控制器类:

1)创建一个Swagger配置类。

2)然后指定控制器的基本包。

import java.util.Collections;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.google.common.base.Predicate;
import com.google.common.base.Predicates;

import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;

import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig
{

  private static final ApiInfo DEFAULT_API_INFO = null; //Swagger info

  @Bean
  public Docket api() 
  {
    return new Docket(DocumentationType.SWAGGER_2)
            .forCodeGeneration(Boolean.TRUE)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.user.controller"))
            .paths(PathSelectors.any())
            .paths(Predicates.not(PathSelectors.regex("/logout.*")))
            .build()
            .apiInfo(apiInfo());
}

private ApiInfo apiInfo() {
     return new ApiInfo(
       "REST API", 
       "REST description of API.", 
       "API TOS", 
       "Terms of service", 
       new Contact("Rajib Garai", "https://www.linkedin.com/in/rajibgarai90/", "90rajibgarai@gmail.com"), 
       "License of API", "API license URL", Collections.emptyList());
}
}
 类似资料:
  • 嗨,我用spring初始化器创建了一个简单的Spring Boot应用程序。我在主应用程序类的同一文件夹中添加了一个控制器。 这是给我以下错误的网址http://localhost:8080/welcome 此应用程序没有针对/错误的显式映射,因此您将其视为回退。 Sat Dec 19 12:51:44 IST 2020出现意外错误(类型=未找到,状态=404)。 如果我使用@restContro

  • 我真的很难理解JavaFX控制器,我的目标是写一个TextArea来充当日志。 我的代码在下面,但我希望能够改变值等从另一个类,我可以调用时需要。我试图创建一个扩展初始化的控制器类,但我无法使它工作。有谁能指引我正确的方向吗?

  • 我刚接触外汇。我有一个有10个标签的标签面板。每个选项卡都有许多控件(图表、按钮等),我想要的是为每个选项卡分配一个控制器。SceneBuilder只允许我为整个视图分配一个控制器,我的意思是,只有顶部面板(根)有“控制器类”选项,所以我必须为一个类中的所有选项卡编写代码,这导致了一个非常大的类,很难理解和维护。也许解决方案很简单,但正如我所说,我对FX的经验很少,我也无法在网上找到类似的东西。

  • 我有这个控制器,我想归还每个人的家具。这种“孩子气”的方法不起作用。这两个“一对多”的关系是正确的。并不强制使用children方法。任何解决问题的资源都是可访问的。 重要提示:Laravel 5.8版 personController.php