自定义 AbstractEndpoint 监听“/”(root)
Custom AbstractEndpoint listening to "/" (root)
我已经实现了一个启动器,可以按照我喜欢的方式配置 Swagger。此外,我想将对应用根目录 URL(例如 localhost:8080
)的每次调用重定向到 /swagger-ui.html
。
因此,我添加了一个自己的 AbstractEndpoint
,它在 @Configuration
class 中实例化如下:
@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);
}
}
各自的 class 看起来像这样:
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?
我通过在 @Configuration
:
中添加一个 WebMvcConfigurerAdapter
bean 用更简单的方法解决了这个问题
@Bean
public WebMvcConfigurerAdapter redirectToSwagger() {
return new WebMvcConfigurerAdapter() {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("").setViewName("redirect:/swagger-ui.html");
}
};
}
我已经实现了一个启动器,可以按照我喜欢的方式配置 Swagger。此外,我想将对应用根目录 URL(例如 localhost:8080
)的每次调用重定向到 /swagger-ui.html
。
因此,我添加了一个自己的 AbstractEndpoint
,它在 @Configuration
class 中实例化如下:
@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);
}
}
各自的 class 看起来像这样:
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?
我通过在 @Configuration
:
WebMvcConfigurerAdapter
bean 用更简单的方法解决了这个问题
@Bean
public WebMvcConfigurerAdapter redirectToSwagger() {
return new WebMvcConfigurerAdapter() {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("").setViewName("redirect:/swagger-ui.html");
}
};
}