Swagger UI 不显示嵌套的 restcontroller class

Swagger UI not displaying nested restcontroller class

我正在开发一个项目,其中首席开发人员将 RestController classes 嵌套在其他 classes 中。

swagger配置如下:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}

并且 class 定义遵循以下格式:

@Slf4j
public class SomeModule {

    @RestController @Transactional @RequiredArgsConstructor @RequestMapping(value="/a/b/c/something")
    public class Controller {   

        @PostMapping(value="/")
        public HttpEntity<Command> createSomething (@RequestBody CreateSomethingCommand command) {
            ...
        } 
        ...
    }
}   

SomeModuleclass中取出classController时,swagger-ui正常显示

但是,当它嵌套在另一个 class 中时,它不起作用。

回答

事实证明,特定的休息控制器甚至无法访问,因为它们嵌套在另一个 class 中。

这会导致 @RestController 和 swagger 文档生成静默失败。

这个问题的解决方案是使嵌套的 classes 静态化!

Static关键字解决问题:public static class Controller {

参考

  • How to create a Spring Bean of a Inner class?