zoukankan      html  css  js  c++  java
  • Swagger2

    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.env.Environment;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
    import org.springframework.web.servlet.resource.PathResourceResolver;
    import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
    import org.springframework.web.util.UrlPathHelper;
    import springfox.documentation.annotations.ApiIgnore;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.DocumentationCache;
    import springfox.documentation.spring.web.json.Json;
    import springfox.documentation.spring.web.json.JsonSerializer;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger.web.ApiResourceController;
    import springfox.documentation.swagger.web.SecurityConfiguration;
    import springfox.documentation.swagger.web.SwaggerResource;
    import springfox.documentation.swagger.web.UiConfiguration;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    import springfox.documentation.swagger2.mappers.ServiceModelToSwagger2Mapper;
    import springfox.documentation.swagger2.web.Swagger2Controller;
    
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * 集成swagger2管理接口文档
     * 重定向swagger2请求
     */
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        /**
         * swagger开关
         */
        @Value("${swagger.show:false}")
        private boolean swaggerShow;
        @Value("${api.title}")
        private String apiTitle;
        @Value("${api.base.package}")
        private String apiBasePage;
        @Value("${api.project.doc.url}")
        private String apiProjectDocUrl;
        @Value("${api.version}")
        private String apiVersion;
        @Value("${contact.name}")
        private String contactName;
        @Value("${contact.url}")
        private String contactUrl;
        @Value("${contact.email}")
        private String contactEmail;
    
        @Bean
        public Docket api() {
            return new Docket(DocumentationType.SWAGGER_2)
                .enable(swaggerShow)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage(apiBasePage))
                .paths(PathSelectors.any())
                .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfo(apiTitle, apiProjectDocUrl, apiVersion, "",
                new Contact(contactName, contactUrl, contactEmail), "", "", Collections.emptyList());
        }
    
        private static final String DEFAULT_PATH = "/swagger2";
    
        /**
         * SwaggerUI资源访问
         *
         * @param servletContext
         * @param order
         * @return
         * @throws Exception
         */
        @Bean
        public SimpleUrlHandlerMapping swaggerUrlHandlerMapping(ServletContext servletContext,
            @Value("${swagger.mapping.order:10}") int order) throws Exception {
            SimpleUrlHandlerMapping urlHandlerMapping = new SimpleUrlHandlerMapping();
            Map<String, ResourceHttpRequestHandler> urlMap = new HashMap<>();
            {
                PathResourceResolver pathResourceResolver = new PathResourceResolver();
                pathResourceResolver.setAllowedLocations(new ClassPathResource("META-INF/resources/webjars/"));
                pathResourceResolver.setUrlPathHelper(new UrlPathHelper());
    
                ResourceHttpRequestHandler resourceHttpRequestHandler = new ResourceHttpRequestHandler();
                resourceHttpRequestHandler.setLocations(Arrays.asList(new ClassPathResource("META-INF/resources/webjars/")));
                resourceHttpRequestHandler.setResourceResolvers(Arrays.asList(pathResourceResolver));
                resourceHttpRequestHandler.setServletContext(servletContext);
                resourceHttpRequestHandler.afterPropertiesSet();
                //设置新的路径
                urlMap.put(DEFAULT_PATH + "/webjars/**", resourceHttpRequestHandler);
            }
            {
                PathResourceResolver pathResourceResolver = new PathResourceResolver();
                pathResourceResolver.setAllowedLocations(new ClassPathResource("META-INF/resources/"));
                pathResourceResolver.setUrlPathHelper(new UrlPathHelper());
    
                ResourceHttpRequestHandler resourceHttpRequestHandler = new ResourceHttpRequestHandler();
                resourceHttpRequestHandler.setLocations(Arrays.asList(new ClassPathResource("META-INF/resources/")));
                resourceHttpRequestHandler.setResourceResolvers(Arrays.asList(pathResourceResolver));
                resourceHttpRequestHandler.setServletContext(servletContext);
                resourceHttpRequestHandler.afterPropertiesSet();
                //设置新的路径
                urlMap.put(DEFAULT_PATH + "/**", resourceHttpRequestHandler);
            }
            urlHandlerMapping.setUrlMap(urlMap);
            //调整DispatcherServlet关于SimpleUrlHandlerMapping的排序
            urlHandlerMapping.setOrder(order);
            return urlHandlerMapping;
        }
    
        /**
         * SwaggerUI接口访问
         */
        @Controller
        @ApiIgnore
        @RequestMapping(DEFAULT_PATH)
        public static class SwaggerResourceController implements InitializingBean {
    
            @Autowired
            private ApiResourceController apiResourceController;
    
            @Autowired
            private Environment environment;
    
            @Autowired
            private DocumentationCache documentationCache;
    
            @Autowired
            private ServiceModelToSwagger2Mapper mapper;
    
            @Autowired
            private JsonSerializer jsonSerializer;
    
            private Swagger2Controller swagger2Controller;
    
            @Override
            public void afterPropertiesSet() {
                swagger2Controller = new Swagger2Controller(environment, documentationCache, mapper, jsonSerializer);
            }
    
            /**
             * 首页
             *
             * @return
             */
            @RequestMapping
            public ModelAndView index() {
                ModelAndView modelAndView = new ModelAndView("redirect:" + DEFAULT_PATH + "/swagger-ui.html");
                return modelAndView;
            }
    
            @RequestMapping("/swagger-resources/configuration/security")
            @ResponseBody
            public ResponseEntity<SecurityConfiguration> securityConfiguration() {
                return apiResourceController.securityConfiguration();
            }
    
            @RequestMapping("/swagger-resources/configuration/ui")
            @ResponseBody
            public ResponseEntity<UiConfiguration> uiConfiguration() {
                return apiResourceController.uiConfiguration();
            }
    
            @RequestMapping("/swagger-resources")
            @ResponseBody
            public ResponseEntity<List<SwaggerResource>> swaggerResources() {
                return apiResourceController.swaggerResources();
            }
    
            @RequestMapping(value = "/v2/api-docs", method = RequestMethod.GET, produces = {"application/json", "application/hal+json"})
            @ResponseBody
            public ResponseEntity<Json> getDocumentation(
                @RequestParam(value = "group", required = false) String swaggerGroup,
                HttpServletRequest servletRequest) {
                return swagger2Controller.getDocumentation(swaggerGroup, servletRequest);
            }
        }
    }
    <properties>
        <swagger2.version>2.9.2</swagger2.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger2.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger2.version}</version>
        </dependency>
        <!-- 这里使用 swagger-bootstrap-ui 替代了原有丑陋的ui-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>
    </dependencies>
    swagger.show = false
    api.base.package = com.xx.xxx.xxxx.controller
    api.title = 管理系统接口文档
    api.project.doc.url = https://docs.xxxx.com/pages?pageId=37647518
    api.version = API V1.0
    contact.name = backend-xxx
    contact.url = https://gitlab.xxxx.com/xxx/backend-xxx
    contact.email = xxx@xxxx.com

    参考:

    https://blog.didispace.com/springbootswagger2/

    https://www.cnblogs.com/sujunyuan/p/12410264.html

    https://blog.csdn.net/weixin_42260311/article/details/88661546

  • 相关阅读:
    Hadoop2.8.2 运行wordcount
    RHEL7.2 安装Hadoop-2.8.2
    RHEL7.2 SSH无密码登录非root用户
    python day 1 homework 2
    python day 1 homework 1
    python三种格式化输出
    windwos 10 安装flask
    ubunit 16 安装pip
    Axure 8 Tab制作
    JavaScript平台Platypi悄然登场
  • 原文地址:https://www.cnblogs.com/fightingtong/p/14760317.html
Copyright © 2011-2022 走看看