我已经实现了一个以我喜欢的方式配置 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?