zoukankan      html  css  js  c++  java
  • SpringBoot集成swagger2自定义访问路径

    前言

    SpringBoot集成swagger2后默认访问路径是ip:port/swagger-ui.html, 由于系统中添加了拦截器, 非"/oss"开头的请求路径都会被拦截, 需要设置swagger的访问路径为/oss/swagger-ui.html

    正文

    方式一

    rest API生成篇:springboot+swagger2路径自定义

    这种方式是把swagger的相关代码导入到项目, 修改index中的url, 相对于方式二繁琐了, 并且展示效果与默认swagger-ui.html有出入, 暂不考虑.

    方式二

    SpringBoot集成SwaggerUI修改访问路径

    这种方式是修改SwaggerConfig, 设置default_path变量即可

    代码如下, 直接拷贝修改为想要的路径即可

    package com.graph.oss.config;
    
    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.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.spring.web.DocumentationCache;
    import springfox.documentation.spring.web.json.Json;
    import springfox.documentation.spring.web.json.JsonSerializer;
    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.HashMap;
    import java.util.List;
    import java.util.Map;
    
    
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        private static final String DEFAULT_PATH = "/oss";
    
        /**
         * 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);
            }
        }
    
    }

    修改后访问路径为

    ip:port/oss/swagger-ui.html

  • 相关阅读:
    【51nod1965】奇怪的式子
    【spoj】DIVCNTK
    【bzoj3173】最长上升子序列
    【UOJ 209】【UER #6】票数统计
    Fib数列2 费马小定理+矩阵乘法
    T37302 P哥的桶
    U32592 摘果实
    【loj6029】「雅礼集训 2017 Day1」市场&&【uoj#228】基础数据结构练习题
    【bzoj4631】踩气球 线段树
    [bzoj4922]Karp-de-Chant Number
  • 原文地址:https://www.cnblogs.com/yadongliang/p/13409093.html
Copyright © 2011-2022 走看看