swagger-bootstrap-ui是基于swagger-ui做了一些优化拓展:
swagger-ui的界面:
swagger-bootstrap-ui界面:
相比于原生的swagger-ui ,swagger-bootstarp-ui提供了更好的ui界面,以及入参,出参直观的分层;下面将swagge-bootstrap-ui整合到springboot项目中:
//springboot版本
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
<!--swagger相关依赖--> <!--原生swagger-ui--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-bean-validators</artifactId> <version>2.9.2</version> </dependency> <!--增强swagger-bootstrap-ui--> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>swagger-bootstrap-ui</artifactId> <version>1.9.3</version> </dependency> <!-- # 增加两个配置解决 NumberFormatException --> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.5.22</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> <version>1.5.22</version> </dependency>
@Slf4j @Configuration @EnableSwagger2 @EnableSwaggerBootstrapUI public class Swagger2Config implements WebMvcConfigurer { /** * 显示swagger-ui.html文档展示页,还必须注入swagger资源: * * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } /** * 帮助中心 (不同的模块这里分不同的包扫描basePackage) * Docket 可以配置多个 * * @return */ @Bean public Docket assist() { return new Docket(DocumentationType.SWAGGER_2) .globalOperationParameters(setRequestHeaders()) //.apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.xxxx.modules.assist.controller")) //加了ApiOperation注解的类,才生成接口文档 .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) .paths(PathSelectors.any()) .build() .groupName("帮助中心"); } /** * 设置请求头 * * @return */ private List<Parameter> setRequestHeaders() { ParameterBuilder ticketPar = new ParameterBuilder(); List<Parameter> pars = new ArrayList<Parameter>(); ticketPar.name("token").description("用户token") .modelRef(new ModelRef("string")).parameterType("header") .required(false).build(); //header中的ticket参数非必填,传空也可以 pars.add(ticketPar.build()); //根据每个方法名也知道当前方法在设置什么参数 return pars; } }
建议在启动类中,直接将swagge-ui文档记录下来
public static void main(String[] args) throws Exception { ConfigurableApplicationContext application = SpringApplication.run(StageApplication.class, args); Environment env = application.getEnvironment(); String ip = InetAddress.getLocalHost().getHostAddress(); String port = env.getProperty("server.port"); //String path = env.getProperty("server.servlet.context-path"); String active = env.getProperty("spring.profiles.active"); String maxFileSize = env.getProperty("spring.servlet.multipart.max-file-size"); //最大文件大小 String maxRequestSize = env.getProperty("spring.servlet.multipart.max-request-size"); //最大请求大小 log.info("\n----------------------------------------------------------\n\t" + "Application is running! Access URLs:\n\t" + "Doc: \t\thttp://" + ip + ":" + port + "/doc.html\n\t" + "spring-profiles-active: \t\t" + active + "\n\t" + "max-file-size: \t\t" + maxFileSize + "\n\t" + "max-request-size: \t\t" + maxRequestSize + "\n" + "----------------------------------------------------------"); }