0

我已经实现了一个以我喜欢的方式配置 Swagger 的启动器。此外,我想将每个调用重定向到应用程序的根 URL(例如localhost:8080)到/swagger-ui.html. 因此,我添加了一个自己的AbstractEndpoint,它在类中实例化@Configuration如下:

@Configuration
@Profile("swagger")
@EnableSwagger2
public class SwaggerConfig {

    ...

    @Bean
    public RootEndpoint rootEndpoint() {
        return new RootEndpoint();
    }

    @Bean
    @ConditionalOnBean(RootEndpoint.class)
    @ConditionalOnEnabledEndpoint("root")
    public RootMvcEndpoint rootMvcEndpoint(RootEndpoint rootEndpoint) {
        return new RootMvcEndpoint(rootEndpoint);
    }
}

相应的类如下所示:

public class RootEndpoint extends AbstractEndpoint<String> {

    public RootEndpoint() {
        super("root");
    }

    @Override
    public String invoke() {
        return ""; // real calls shall be handled by RootMvcEndpoint
    }
}

public class RootMvcEndpoint extends EndpointMvcAdapter {

    public RootMvcEndpoint(RootEndpoint delegate) {
        super(delegate);
    }

    @RequestMapping(method = {RequestMethod.GET}, produces = { "*/*" })
    public void redirect(HttpServletResponse httpServletResponse) throws IOException {
        httpServletResponse.sendRedirect("/swagger-ui.html");
    }
}

如中所述public RootEndpoint(),自定义端点绑定到/root. 不幸的是,我不能指定super("");或者super("/");因为这些值会引发异常(Id must only contains letters, numbers and '_')。

如何使用@Configuration文件实例化 bean 来实现让自定义端点在启动器中监听根 URL?

4

1 回答 1

0

我通过在以下位置添加一个WebMvcConfigurerAdapterbean以一种更简单的方法解决了它@Configuration

@Bean
public WebMvcConfigurerAdapter redirectToSwagger() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("").setViewName("redirect:/swagger-ui.html");
        }
    };
}
于 2017-10-30T10:49:17.487 回答