使用Spring Boot配置Swagger时获得意外结果

Kis*_*ada 8 spring swagger swagger-ui spring-boot

我是Swagger的新手,我开始使用Spring Boot构建非常简单的Web服务.

问题是,我招摇配置后,在浏览器中,当我键入本地主机:8080 /招摇,ui.html使用动态Servlet时我得到一个表示"无法推断基本URL一些奇怪的弹出消息,这下面的屏幕这是常见的.注册或当API在API网关后面时".
我知道这似乎是一个重复的问题,但我无法解决这个问题.接下来,我发布了屏幕截图和完整的代码,我没有出错.如果我出错了,请让我明白.

截屏:在此输入图像描述

代码
SwaggerConfig.java

package com.test.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import static springfox.documentation.builders.PathSelectors.regex;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .paths(regex("/greet.*"))
                .build();
    }
}
Run Code Online (Sandbox Code Playgroud)

TestApplication.java

package com.test.config;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages="com.test.controllers") 
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

TestController.java

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/greet")
public class TestController {

    @RequestMapping
        public String getGreeting() {
        return "Hello There";
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,SwaggerConfig.javaTestApplication.java都属于同一个包,即com.test.configTestController.java属于com.test.controllers

这是我所有的代码,在pom.xml中我有两个依赖项

<dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.6.1</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.6.1</version>
        <scope>compile</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

Mar*_*ier 6

我解决了它@EnableSwagger2在Application类上添加注释.

@SpringBootApplication
@EnableSwagger2 //this
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
Run Code Online (Sandbox Code Playgroud)


小智 5

在将Spring-boot应用程序部署为war工件时,我遇到了同样的问题.在使用嵌入式tomcat运行应用程序时(作为独立的spring-boot应用程序),在将war文件部署到面向上述问题的远程tomcat的同时,它正常工作.

在挖掘中,我发现我错过了我的战争档案应用程序的Servlet初始化程序.

以下为我工作就像一个魅力.

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application){ 
   return application.sources(TestApplication.class); 
   }
}
Run Code Online (Sandbox Code Playgroud)


小智 0

嗯,尝试将 .paths 更改为 .apis(RequestHandlerSelectors.basePackage("package where your controller is com.demo.example.controller")).build(); 尝试一下,如果不起作用,请告诉我。