packagecom.graph.oss.config;importorg.springframework.beans.factory.InitializingBean;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.core.env.Environment;importorg.springframework.core.io.ClassPathResource;importorg.springframework.http.ResponseEntity;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.ResponseBody;importorg.springframework.web.servlet.handler.SimpleUrlHandlerMapping;importorg.springframework.web.servlet.resource.PathResourceResolver;importorg.springframework.web.servlet.resource.ResourceHttpRequestHandler;importorg.springframework.web.util.UrlPathHelper;importspringfox.documentation.annotations.ApiIgnore;importspringfox.documentation.spring.web.DocumentationCache;importspringfox.documentation.spring.web.json.Json;importspringfox.documentation.spring.web.json.JsonSerializer;importspringfox.documentation.swagger.web.ApiResourceController;importspringfox.documentation.swagger.web.SecurityConfiguration;importspringfox.documentation.swagger.web.SwaggerResource;importspringfox.documentation.swagger.web.UiConfiguration;importspringfox.documentation.swagger2.annotations.EnableSwagger2;importspringfox.documentation.swagger2.mappers.ServiceModelToSwagger2Mapper;importspringfox.documentation.swagger2.web.Swagger2Controller;importjavax.servlet.ServletContext;importjavax.servlet.http.HttpServletRequest;importjava.util.Arrays;importjava.util.HashMap;importjava.util.List;importjava.util.Map;
@Configuration
@EnableSwagger2public classSwaggerConfig {private static final String DEFAULT_PATH = "/oss";/*** SwaggerUI资源访问
*
*@paramservletContext
*@paramorder
*@return*@throwsException*/@BeanpublicSimpleUrlHandlerMapping swaggerUrlHandlerMapping(ServletContext servletContext,
@Value("${swagger.mapping.order:10}") int order) throwsException {
SimpleUrlHandlerMapping urlHandlerMapping= newSimpleUrlHandlerMapping();
Map urlMap = new HashMap<>();
{
PathResourceResolver pathResourceResolver= newPathResourceResolver();
pathResourceResolver.setAllowedLocations(new ClassPathResource("META-INF/resources/webjars/"));
pathResourceResolver.setUrlPathHelper(newUrlPathHelper());
ResourceHttpRequestHandler resourceHttpRequestHandler= newResourceHttpRequestHandler();
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= newPathResourceResolver();
pathResourceResolver.setAllowedLocations(new ClassPathResource("META-INF/resources/"));
pathResourceResolver.setUrlPathHelper(newUrlPathHelper());
ResourceHttpRequestHandler resourceHttpRequestHandler= newResourceHttpRequestHandler();
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);returnurlHandlerMapping;
}/*** SwaggerUI接口访问*/@Controller
@ApiIgnore
@RequestMapping(DEFAULT_PATH)public static class SwaggerResourceController implementsInitializingBean {
@AutowiredprivateApiResourceController apiResourceController;
@AutowiredprivateEnvironment environment;
@AutowiredprivateDocumentationCache documentationCache;
@AutowiredprivateServiceModelToSwagger2Mapper mapper;
@AutowiredprivateJsonSerializer jsonSerializer;privateSwagger2Controller swagger2Controller;
@Overridepublic voidafterPropertiesSet() {
swagger2Controller= newSwagger2Controller(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")
@ResponseBodypublic ResponseEntitysecurityConfiguration() {returnapiResourceController.securityConfiguration();
}
@RequestMapping("/swagger-resources/configuration/ui")
@ResponseBodypublic ResponseEntityuiConfiguration() {returnapiResourceController.uiConfiguration();
}
@RequestMapping("/swagger-resources")
@ResponseBodypublic ResponseEntity>swaggerResources() {returnapiResourceController.swaggerResources();
}
@RequestMapping(value= "/v2/api-docs", method = RequestMethod.GET, produces = {"application/json", "application/hal+json"})
@ResponseBodypublic ResponseEntitygetDocumentation(
@RequestParam(value= "group", required = false) String swaggerGroup,
HttpServletRequest servletRequest) {returnswagger2Controller.getDocumentation(swaggerGroup, servletRequest);
}
}
}