Контроллер не отображается в swagger-ui.html

Я использую Swagger 2 с загрузкой без весны, и я также могу развернуть свое приложение на Tomcat и успешно запустить его. Но контроллер не появляется в swagger-ui.html, просто появляется пустая страница с зеленым заголовком чванства. Я потратил два дня на эту проблему. Не могли бы вы дать мне несколько советов?

@Controller означает класс, как показано ниже:

 @Api
 @Controller
 @RequestMapping("/user")
 public class UserController {

 protected Logger logger = LoggerFactory.getLogger(UserController.class);

 @Autowired
 private UserService userService;

 @RequestMapping("/showInfos")
 public @ResponseBody Object showUserInfos(){
    logger.info("-----------------------showUserInfos-----------------------");
    List<UserInfo> userInfos = userService.getUsers();
    return userInfos;
}

моя конфигурация spring-mvc.xml выглядит следующим образом:

    <mvc:annotation-driven/>
<!@Controller inject bean -->
<context:component-scan base-package="com.roy.demo , version" /> 

<!-- Enables swgger ui -->
<mvc:resources mapping="swagger-ui.html" location="classpath:/META-INF/resources/" />
<mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/" /> 

<!-- Include a swagger configuration -->
<bean name="/applicationSwaggerConfig" class="com.roy.demo.config.ApplicationSwaggerConfig" />

также мой класс конфигурации swagger выглядит следующим образом:

@EnableSwagger2  
public class ApplicationSwaggerConfig {

private static final Logger LOGGER = Logger.getLogger(ApplicationSwaggerConfig.class);

@Bean
public Docket api() {
    LOGGER.info("################################ into Docket api() #####################################");
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.roy.demo.controller"))
            .paths(PathSelectors.any())
            .build();
}

}

моя зависимость maven pom.xml swagger2 выглядит следующим образом:

        <!-- Swagger 2.0 -->
    <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-core</artifactId>
        <version>1.5.3</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.5.0</version>
    </dependency>

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.5.0</version>
    </dependency>

Ниже приведен результат, когда я ввожу URL-адрес конечной точки: -ui.html

введите здесь описание изображения


person Roy Wu    schedule 21.09.2016    source источник
comment
что означает @Controller, не может отображаться в swagger-ui.   -  person Vaibs    schedule 21.09.2016
comment
поделитесь своим классом конфигурации для чванства   -  person Vaibs    schedule 21.09.2016
comment
Пожалуйста, следуйте этому ответу для того же: - stackoverflow.com/a/42922167/2357869   -  person Vijay    schedule 21.03.2017


Ответы (3)


Я также новичок в Swagger, но приведенный ниже код я использовал для своей конфигурации swagger, и он хорошо работает для меня. Я выполнил настройку в классе.

Класс конфигурации.

@Configuration
@EnableWebMvc
@EnableSwagger2
@ComponentScan(basePackages = "com.*")
@PropertySource(value = { "classpath:log4j.properties" })
public class SpringConfig extends WebMvcConfigurerAdapter {
    @Bean
            public Docket api() { 
                return new Docket(DocumentationType.SWAGGER_2)  .apiInfo(apiInfo()).directModelSubstitute(LocalDate.class, String.class).genericModelSubstitutes(ResponseEntity.class)
                        .useDefaultResponseMessages(false)
                  .select()           
                  .apis(RequestHandlerSelectors.any())              
                  .paths(PathSelectors.any())                        
                  .build();                                           
            }
            @Override
            public void addResourceHandlers(ResourceHandlerRegistry registry) {
                registry.addResourceHandler("swagger-ui.html")
                  .addResourceLocations("classpath:/META-INF/resources/");
                registry.addResourceHandler("/webjars/**")
                  .addResourceLocations("classpath:/META-INF/resources/webjars/");
            }
    @SuppressWarnings("deprecation")
    private ApiInfo apiInfo() {
        ApiInfo apiInfo = new ApiInfo(
          "API",
          "API for xxxx",
          "API TOS",
          "Terms of service",
          "xxx",
          "License of API",
          "");
        return apiInfo;
    }

}

Зависимость Мейвена:

<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.4.0</version>
        </dependency>
<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.4.0</version>
        </dependency>

Класс контроллера

@RestController
@Api(value="users", description="Endpoint for user management")
public class Controller {
}

конечная точка:

https://localhost:8080/AppName/swagger-ui.html
person Vaibs    schedule 22.09.2016
comment
i.stack.imgur.com/l3wag.png Я до сих пор не могу решить эту проблему проблема, см. картинку, которую я вырезал выше - person Roy Wu; 22.09.2016
comment
вы изменили конфигурацию? - person Vaibs; 22.09.2016
comment
Да, я сделал, как и все, что вы сделали с классом конфигурации swagger, но все равно не работает - person Roy Wu; 22.09.2016
comment
Взял ваш код, но он не работает на моей машине, возможно, отсутствуют некоторые зависимости. Удалите зависимость swagger-core от pom, также поместите аннотацию !Api на уровень класса и удалите @ApiOperation(value = 获取用户列表, notes =) из метода и изменили .apis из класса swaggerconfig в RequestHandlerSelectors.any() и попробуйте один раз - person Vaibs; 22.09.2016

очистите кеш браузера и повторите попытку. или используйте вкладку инкогнито. Мне это помогло

person user12224442    schedule 22.01.2021

У меня случилось так, что один из контроллеров не отображался. Проблема заключалась в том, что класс kotlin не объявил ни одного пакета. Объявление пакета в контроллере решило проблему.

person Ignacio Tomas Crespo    schedule 26.01.2021