前言

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

正文

方式一

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

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

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

SpringBoot集成swagger2自定义访问路径_spring



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


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



作者:习惯沉淀


如果文中有误或对本文有不同的见解,欢迎在评论区留言。