From b4b4e34db0bae2956e9c7a640619b9575df45688 Mon Sep 17 00:00:00 2001 From: xmzhao71 Date: Mon, 9 Oct 2023 09:59:07 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=A2=9E=E5=8A=A0swagger=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mallink-swagger/pom.xml | 29 ++++ .../com/iformall/annotation/ApiVersion.java | 19 +++ .../annotation/BaseEnableSwagger.java | 14 ++ .../ParkingSwaggerResourcesProvider.java | 53 +++++++ .../iformall/config/SwaggerConfiguration.java | 132 ++++++++++++++++++ .../iformall/config/SwaggerProperties.java | 81 +++++++++++ .../iformall/constant/SwaggerConstant.java | 5 + mallinkAdmin/pom.xml | 5 + .../java/com/iformall/UserApplication.java | 3 +- .../java/com/iformall/config/ShiroConfig.java | 6 +- .../com/iformall/config/Swagger2Config.java | 122 ++++++++-------- .../java/com/iformall/config/WebConfig.java | 2 +- .../controller/sys/HomeController.java | 3 + .../src/main/resources/application-dev.yml | 21 ++- mallinkBApi/pom.xml | 5 + .../main/java/com/iformall/BApplication.java | 2 + .../com/iformall/config/Swagger2Config.java | 98 ++++++------- .../com/iformall/config/WebMvcConfig.java | 2 +- .../iformall/controller/BankController.java | 3 + .../src/main/resources/application-dev.yml | 17 ++- pom.xml | 1 + 21 files changed, 506 insertions(+), 117 deletions(-) create mode 100644 mallink-swagger/pom.xml create mode 100644 mallink-swagger/src/main/java/com/iformall/annotation/ApiVersion.java create mode 100644 mallink-swagger/src/main/java/com/iformall/annotation/BaseEnableSwagger.java create mode 100644 mallink-swagger/src/main/java/com/iformall/config/ParkingSwaggerResourcesProvider.java create mode 100644 mallink-swagger/src/main/java/com/iformall/config/SwaggerConfiguration.java create mode 100644 mallink-swagger/src/main/java/com/iformall/config/SwaggerProperties.java create mode 100644 mallink-swagger/src/main/java/com/iformall/constant/SwaggerConstant.java diff --git a/mallink-swagger/pom.xml b/mallink-swagger/pom.xml new file mode 100644 index 000000000..84e225639 --- /dev/null +++ b/mallink-swagger/pom.xml @@ -0,0 +1,29 @@ + + + + mallink + com.iformall + 1.0 + + 4.0.0 + + mallink-swagger + + + + + + io.springfox + springfox-swagger2 + 2.9.2 + + + + com.github.xiaoymin + swagger-bootstrap-ui + 1.9.3 + + + \ No newline at end of file diff --git a/mallink-swagger/src/main/java/com/iformall/annotation/ApiVersion.java b/mallink-swagger/src/main/java/com/iformall/annotation/ApiVersion.java new file mode 100644 index 000000000..d9ceb4e7c --- /dev/null +++ b/mallink-swagger/src/main/java/com/iformall/annotation/ApiVersion.java @@ -0,0 +1,19 @@ +package com.iformall.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface ApiVersion { + + /** + * 接口版本号(对应swagger中的group) + * + * @return String[] + */ + String[] group(); +} diff --git a/mallink-swagger/src/main/java/com/iformall/annotation/BaseEnableSwagger.java b/mallink-swagger/src/main/java/com/iformall/annotation/BaseEnableSwagger.java new file mode 100644 index 000000000..fb78b802b --- /dev/null +++ b/mallink-swagger/src/main/java/com/iformall/annotation/BaseEnableSwagger.java @@ -0,0 +1,14 @@ +package com.iformall.annotation; + +import com.iformall.config.SwaggerConfiguration; +import org.springframework.context.annotation.Import; + +import java.lang.annotation.*; + +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +@Import({SwaggerConfiguration.class}) +public @interface BaseEnableSwagger { +} diff --git a/mallink-swagger/src/main/java/com/iformall/config/ParkingSwaggerResourcesProvider.java b/mallink-swagger/src/main/java/com/iformall/config/ParkingSwaggerResourcesProvider.java new file mode 100644 index 000000000..154ab07ea --- /dev/null +++ b/mallink-swagger/src/main/java/com/iformall/config/ParkingSwaggerResourcesProvider.java @@ -0,0 +1,53 @@ +package com.iformall.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import springfox.documentation.swagger.web.SwaggerResource; +import springfox.documentation.swagger.web.SwaggerResourcesProvider; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +@Component +public class ParkingSwaggerResourcesProvider implements SwaggerResourcesProvider { + + /** + * swagger2 的特定资源地址 + */ + private static final String SWAGGER2URL = "/v2/api-docs"; + + + /** + * 本应用名称,下文需要将自己排除掉 + */ + @Value("${spring.application.name}") + private String curApplicationName; + + @Autowired + private SwaggerProperties swaggerProperties; + + @Override + public List get() { + List resources = new ArrayList<>(); + List routeHosts = new ArrayList<>(); + + Set allUrls = new HashSet<>(); + routeHosts.forEach(instance -> { + // /serviceId/v2/api-info,当网关调用这个接口时,会自动寻找对应的服务实例 + String url = "/" + instance + SWAGGER2URL; + if (!allUrls.contains(url)) { + allUrls.add(url); + SwaggerResource swaggerResource = new SwaggerResource(); + swaggerResource.setUrl(url); + //swaggerResource.setLocation(url);location 已过期,直接采用 url 代替 + swaggerResource.setName(instance); + resources.add(swaggerResource); + } + }); + return resources; + } + +} diff --git a/mallink-swagger/src/main/java/com/iformall/config/SwaggerConfiguration.java b/mallink-swagger/src/main/java/com/iformall/config/SwaggerConfiguration.java new file mode 100644 index 000000000..40c6490ab --- /dev/null +++ b/mallink-swagger/src/main/java/com/iformall/config/SwaggerConfiguration.java @@ -0,0 +1,132 @@ +package com.iformall.config; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.iformall.annotation.ApiVersion; +import com.iformall.constant.SwaggerConstant; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; +import springfox.documentation.builders.ApiInfoBuilder; +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.paths.RelativePathProvider; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import javax.servlet.ServletContext; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Configuration +@EnableSwagger2 +@EnableAutoConfiguration +@EnableConfigurationProperties(SwaggerProperties.class) +@ConditionalOnProperty(name = "swagger.enabled", matchIfMissing = true) +public class SwaggerConfiguration { + + private static final List DEFAULT_EXCLUDE_PATH = Arrays.asList("/error"); + private static final String BASE_PATH = "/**"; + + @Autowired + private SwaggerProperties swaggerProperties; + + private DefaultListableBeanFactory context; + private RequestMappingHandlerMapping handlerMapping; + + public SwaggerConfiguration(DefaultListableBeanFactory context, + RequestMappingHandlerMapping handlerMapping) { + this.context = context; + this.handlerMapping = handlerMapping; + dynamicCreate(); + } + + private void dynamicCreate() { +// swaggerProperties.getServices().forEach(item -> { +// api(item); +// +// }); + } + + + + @Bean + public Docket api(ServletContext servletContext) { + // base-path处理 + if (swaggerProperties.getBasePath().isEmpty()) { + swaggerProperties.getBasePath().add(BASE_PATH); + } + List> basePath = new ArrayList<>(swaggerProperties.getBasePath().size()); + swaggerProperties.getBasePath().forEach(path -> basePath.add(PathSelectors.ant(path))); + + // exclude-path处理 + if (swaggerProperties.getExcludePath().isEmpty()) { + swaggerProperties.getExcludePath().addAll(DEFAULT_EXCLUDE_PATH); + } + List> excludePath = new ArrayList<>(); + swaggerProperties.getExcludePath().forEach(path -> excludePath.add(PathSelectors.ant(path))); + + return new Docket(DocumentationType.SWAGGER_2) + .host(swaggerProperties.getHost() + "/B") + .apiInfo(apiInfo(swaggerProperties)).select() + .apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage())) + .apis(input -> { + ApiVersion apiVersion = input.getHandlerMethod().getMethodAnnotation(ApiVersion.class); + return apiVersion != null && Arrays.asList(apiVersion.group()).contains(SwaggerConstant.V_1_0_0); + }) + .paths( + Predicates.and( + Predicates.not(Predicates.or(excludePath)), + Predicates.or(basePath) + ) + ) + .build().groupName("a") + .pathMapping("/B"); + } + + private ApiInfo apiInfo(SwaggerProperties swaggerProperties) { + return new ApiInfoBuilder() + .title(swaggerProperties.getTitle()) + .description(swaggerProperties.getDescription()) + .license(swaggerProperties.getLicense()) + .licenseUrl(swaggerProperties.getLicenseUrl()) + .termsOfServiceUrl(swaggerProperties.getTermsOfServiceUrl()) + .contact(new Contact(swaggerProperties.getContact().getName(), swaggerProperties.getContact().getUrl(), swaggerProperties.getContact().getEmail())) + .version(swaggerProperties.getVersion()) + .build(); + } + +// @Override +// public void addViewControllers(ViewControllerRegistry registry) { +// String prePath = swaggerProperties.getPrePath(); +// String apiDocs = "/v2/api-docs"; +// String configUi = "/swagger-resources/configuration/ui"; +// String configSecurity = "/swagger-resources/configuration/security"; +// String resources = "/swagger-resources"; +// +// registry.addRedirectViewController(prePath + apiDocs, apiDocs).setKeepQueryParams(true); +// registry.addRedirectViewController(prePath + resources, resources); +// registry.addRedirectViewController(prePath + configUi, configUi); +// registry.addRedirectViewController(prePath + configSecurity, configSecurity); +// registry.addRedirectViewController(prePath, "/"); +// } +// +// @Override +// public void addResourceHandlers(ResourceHandlerRegistry registry) { +// registry.addResourceHandler(swaggerProperties.getPrePath() + "/**") +// .addResourceLocations("classpath:/META-INF/resources/"); +// } +} + diff --git a/mallink-swagger/src/main/java/com/iformall/config/SwaggerProperties.java b/mallink-swagger/src/main/java/com/iformall/config/SwaggerProperties.java new file mode 100644 index 000000000..b82b03a67 --- /dev/null +++ b/mallink-swagger/src/main/java/com/iformall/config/SwaggerProperties.java @@ -0,0 +1,81 @@ +package com.iformall.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Data +@ConfigurationProperties("swagger") +public class SwaggerProperties { + private Map services; + private String prePath; + /** + * 是否开启swagger + */ + private Boolean enabled; + /** + * swagger会解析的包路径 + **/ + private String basePackage = ""; + /** + * swagger会解析的url规则 + **/ + private List basePath = new ArrayList<>(); + /** + * 在basePath基础上需要排除的url规则 + **/ + private List excludePath = new ArrayList<>(); + /** + * 标题 + **/ + private String title = ""; + /** + * 描述 + **/ + private String description = ""; + /** + * 版本 + **/ + private String version = ""; + /** + * 许可证 + **/ + private String license = ""; + /** + * 许可证URL + **/ + private String licenseUrl = ""; + /** + * 服务条款URL + **/ + private String termsOfServiceUrl = ""; + + /** + * host信息 + **/ + private String host = ""; + /** + * 联系人信息 + */ + private Contact contact = new Contact(); + + @Data + public static class Contact { + /** + * 联系人 + **/ + private String name = ""; + /** + * 联系人url + **/ + private String url = ""; + /** + * 联系人email + **/ + private String email = ""; + + } +} diff --git a/mallink-swagger/src/main/java/com/iformall/constant/SwaggerConstant.java b/mallink-swagger/src/main/java/com/iformall/constant/SwaggerConstant.java new file mode 100644 index 000000000..7350e9c64 --- /dev/null +++ b/mallink-swagger/src/main/java/com/iformall/constant/SwaggerConstant.java @@ -0,0 +1,5 @@ +package com.iformall.constant; + +public interface SwaggerConstant { + String V_1_0_0 = "v1.0.0"; +} diff --git a/mallinkAdmin/pom.xml b/mallinkAdmin/pom.xml index 7c66acb51..69e849071 100644 --- a/mallinkAdmin/pom.xml +++ b/mallinkAdmin/pom.xml @@ -18,6 +18,11 @@ + + com.iformall + mallink-swagger + 1.0 + com.iformall mallinkService diff --git a/mallinkAdmin/src/main/java/com/iformall/UserApplication.java b/mallinkAdmin/src/main/java/com/iformall/UserApplication.java index b5270e236..d42a41a34 100644 --- a/mallinkAdmin/src/main/java/com/iformall/UserApplication.java +++ b/mallinkAdmin/src/main/java/com/iformall/UserApplication.java @@ -1,5 +1,6 @@ package com.iformall; +import com.iformall.annotation.BaseEnableSwagger; import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; import org.mybatis.spring.annotation.MapperScan; import org.rocketmq.starter.annotation.EnableRocketMQ; @@ -17,7 +18,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; */ @SpringBootApplication @MapperScan(basePackages = {"com.iformall.mapper"}) -@EnableSwagger2 +@BaseEnableSwagger @EnableEncryptableProperties @EnableAsync @EnableRocketMQ diff --git a/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java b/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java index c11cee65d..b031c8ce9 100644 --- a/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java +++ b/mallinkAdmin/src/main/java/com/iformall/config/ShiroConfig.java @@ -134,11 +134,13 @@ public class ShiroConfig { // filterChainDefinitionMap.put(resources.getUrl(),permission); // } // } - // swagger-ui - filterChainDefinitionMap.put("/swagger-ui.html", "anon"); + // swagger2 + filterChainDefinitionMap.put("/doc.html", "anon"); filterChainDefinitionMap.put("/v2/**", "anon"); filterChainDefinitionMap.put("/swagger-resources/**", "anon"); filterChainDefinitionMap.put("/webjars/**", "anon"); + filterChainDefinitionMap.put("/B/**", "anon"); + filterChainDefinitionMap.put("/C/**", "anon"); filterChainDefinitionMap.put("/version", "anon"); filterChainDefinitionMap.put("/wxDeviceScreenAd/**", "anon"); diff --git a/mallinkAdmin/src/main/java/com/iformall/config/Swagger2Config.java b/mallinkAdmin/src/main/java/com/iformall/config/Swagger2Config.java index 335b86b7b..fc80b3bbd 100644 --- a/mallinkAdmin/src/main/java/com/iformall/config/Swagger2Config.java +++ b/mallinkAdmin/src/main/java/com/iformall/config/Swagger2Config.java @@ -1,61 +1,61 @@ -package com.iformall.config; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.ParameterBuilder; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.schema.ModelRef; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.service.Parameter; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.paths.RelativePathProvider; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -import javax.servlet.ServletContext; -import java.util.ArrayList; -import java.util.List; - -//参考:http://blog.csdn.net/catoop/article/details/50668896 -@Configuration -@EnableSwagger2 -public class Swagger2Config { - - @Autowired - private ServletContext servletContext; - - @Bean - public Docket createRestApi() { - ParameterBuilder tokenPar = new ParameterBuilder(); - List pars = new ArrayList(); - //增加一个request的header参数 - tokenPar.name("token").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); - pars.add(tokenPar.build()); - return new Docket(DocumentationType.SWAGGER_2) - .apiInfo(apiInfo()) - .select() - .apis(RequestHandlerSelectors.basePackage("com.iformall.controller")) - .paths(PathSelectors.any()) - .build() - .globalOperationParameters(pars) - .pathProvider(new RelativePathProvider(servletContext) { - @Override - public String getApplicationBasePath() { - return "/api"; - } - }); - } - - private ApiInfo apiInfo() { - return new ApiInfoBuilder() - .title("a端 api") - .description("a api") - .termsOfServiceUrl("http://localhost:7000") - .version("2.0") - .build(); - } - -} \ No newline at end of file +//package com.iformall.config; +// +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import springfox.documentation.builders.ApiInfoBuilder; +//import springfox.documentation.builders.ParameterBuilder; +//import springfox.documentation.builders.PathSelectors; +//import springfox.documentation.builders.RequestHandlerSelectors; +//import springfox.documentation.schema.ModelRef; +//import springfox.documentation.service.ApiInfo; +//import springfox.documentation.service.Parameter; +//import springfox.documentation.spi.DocumentationType; +//import springfox.documentation.spring.web.paths.RelativePathProvider; +//import springfox.documentation.spring.web.plugins.Docket; +//import springfox.documentation.swagger2.annotations.EnableSwagger2; +// +//import javax.servlet.ServletContext; +//import java.util.ArrayList; +//import java.util.List; +// +////参考:http://blog.csdn.net/catoop/article/details/50668896 +//@Configuration +//@EnableSwagger2 +//public class Swagger2Config { +// +// @Autowired +// private ServletContext servletContext; +// +// @Bean +// public Docket createRestApi() { +// ParameterBuilder tokenPar = new ParameterBuilder(); +// List pars = new ArrayList(); +// //增加一个request的header参数 +// tokenPar.name("token").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); +// pars.add(tokenPar.build()); +// return new Docket(DocumentationType.SWAGGER_2) +// .apiInfo(apiInfo()) +// .select() +// .apis(RequestHandlerSelectors.basePackage("com.iformall.controller")) +// .paths(PathSelectors.any()) +// .build() +// .globalOperationParameters(pars) +// .pathProvider(new RelativePathProvider(servletContext) { +// @Override +// public String getApplicationBasePath() { +// return "/api"; +// } +// }); +// } +// +// private ApiInfo apiInfo() { +// return new ApiInfoBuilder() +// .title("a端 api") +// .description("a api") +// .termsOfServiceUrl("http://localhost:7000") +// .version("2.0") +// .build(); +// } +// +//} \ No newline at end of file diff --git a/mallinkAdmin/src/main/java/com/iformall/config/WebConfig.java b/mallinkAdmin/src/main/java/com/iformall/config/WebConfig.java index d4e06206b..ad5498ccd 100644 --- a/mallinkAdmin/src/main/java/com/iformall/config/WebConfig.java +++ b/mallinkAdmin/src/main/java/com/iformall/config/WebConfig.java @@ -100,7 +100,7 @@ public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("swagger-ui.html") + registry.addResourceHandler("/doc.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/sys/HomeController.java b/mallinkAdmin/src/main/java/com/iformall/controller/sys/HomeController.java index fe99a89d7..cdadb502e 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/sys/HomeController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/sys/HomeController.java @@ -2,10 +2,12 @@ package com.iformall.controller.sys; import com.google.code.kaptcha.Constants; import com.google.code.kaptcha.Producer; +import com.iformall.annotation.ApiVersion; import com.iformall.annotation.SystemControllerLog; import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; +import com.iformall.constant.SwaggerConstant; import com.iformall.controller.base.BaseController; import com.iformall.domain.po.MallUserInfo; import com.iformall.domain.po.WxAppinfo; @@ -92,6 +94,7 @@ public class HomeController extends BaseController { @Qualifier("objectCommonRedisTemplate") RedisTemplate redisTemplate; + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("验证码") @GetMapping("/captcha.jpg") public void captcha(HttpServletResponse response)throws ServletException, IOException { diff --git a/mallinkAdmin/src/main/resources/application-dev.yml b/mallinkAdmin/src/main/resources/application-dev.yml index a55e3e1d6..c91d8f9d2 100644 --- a/mallinkAdmin/src/main/resources/application-dev.yml +++ b/mallinkAdmin/src/main/resources/application-dev.yml @@ -201,4 +201,23 @@ ueditor: logging: level: com.iformall: debug - path: ./logs/admin \ No newline at end of file + path: ./logs/admin + +debug: true +swagger: + services: + a: / + b: /B + pre-path: ${server.servlet.context-path} + base-package: com.iformall.controller + title: 富茂_iformall_接口文档 + description: 前后端联调 + version: 1.0 + license: Apache + license-url: https://admintest.malls.iformall.com + terms-of-service-url: https://admintest.malls.iformall.com + host: https://admintest.malls.iformall.com + contact: + name: 张三 + url: https://admintest.malls.iformall.com + email: zhangsan@163.com \ No newline at end of file diff --git a/mallinkBApi/pom.xml b/mallinkBApi/pom.xml index 9678c5914..85f468648 100644 --- a/mallinkBApi/pom.xml +++ b/mallinkBApi/pom.xml @@ -12,6 +12,11 @@ mallinkBApi + + com.iformall + mallink-swagger + 1.0 + com.iformall mallinkService diff --git a/mallinkBApi/src/main/java/com/iformall/BApplication.java b/mallinkBApi/src/main/java/com/iformall/BApplication.java index 340fb18cd..57b90022d 100644 --- a/mallinkBApi/src/main/java/com/iformall/BApplication.java +++ b/mallinkBApi/src/main/java/com/iformall/BApplication.java @@ -1,5 +1,6 @@ package com.iformall; +import com.iformall.annotation.BaseEnableSwagger; import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; import org.mybatis.spring.annotation.MapperScan; import org.rocketmq.starter.annotation.EnableRocketMQ; @@ -13,6 +14,7 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy; * @author chenkx * @date 2017-12-26 */ +@BaseEnableSwagger @SpringBootApplication @MapperScan(basePackages = {"com.iformall.mapper"}) @EnableEncryptableProperties diff --git a/mallinkBApi/src/main/java/com/iformall/config/Swagger2Config.java b/mallinkBApi/src/main/java/com/iformall/config/Swagger2Config.java index 884ba6c19..3b014a7bb 100644 --- a/mallinkBApi/src/main/java/com/iformall/config/Swagger2Config.java +++ b/mallinkBApi/src/main/java/com/iformall/config/Swagger2Config.java @@ -1,49 +1,49 @@ -package com.iformall.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.ParameterBuilder; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.schema.ModelRef; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.service.Parameter; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -import java.util.ArrayList; -import java.util.List; - -//参考:http://blog.csdn.net/catoop/article/details/50668896 -@Configuration -@EnableSwagger2 -public class Swagger2Config { - - @Bean - public Docket createRestApi() { - ParameterBuilder tokenPar = new ParameterBuilder(); - List pars = new ArrayList(); - //增加一个request的header参数 - tokenPar.name("token").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); - pars.add(tokenPar.build()); - return new Docket(DocumentationType.SWAGGER_2) - .apiInfo(apiInfo()) - .select() - .apis(RequestHandlerSelectors.basePackage("com.iformall.controller")) - .paths(PathSelectors.any()) - .build() - .globalOperationParameters(pars); - } - - private ApiInfo apiInfo() { - return new ApiInfoBuilder() - .title("b端 api") - .description("b端 api") - .termsOfServiceUrl("http://localhost:8000") - .version("2.0") - .build(); - } - -} \ No newline at end of file +//package com.iformall.config; +// +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import springfox.documentation.builders.ApiInfoBuilder; +//import springfox.documentation.builders.ParameterBuilder; +//import springfox.documentation.builders.PathSelectors; +//import springfox.documentation.builders.RequestHandlerSelectors; +//import springfox.documentation.schema.ModelRef; +//import springfox.documentation.service.ApiInfo; +//import springfox.documentation.service.Parameter; +//import springfox.documentation.spi.DocumentationType; +//import springfox.documentation.spring.web.plugins.Docket; +//import springfox.documentation.swagger2.annotations.EnableSwagger2; +// +//import java.util.ArrayList; +//import java.util.List; +// +////参考:http://blog.csdn.net/catoop/article/details/50668896 +//@Configuration +//@EnableSwagger2 +//public class Swagger2Config { +// +// @Bean +// public Docket createRestApi() { +// ParameterBuilder tokenPar = new ParameterBuilder(); +// List pars = new ArrayList(); +// //增加一个request的header参数 +// tokenPar.name("token").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); +// pars.add(tokenPar.build()); +// return new Docket(DocumentationType.SWAGGER_2) +// .apiInfo(apiInfo()) +// .select() +// .apis(RequestHandlerSelectors.basePackage("com.iformall.controller")) +// .paths(PathSelectors.any()) +// .build() +// .globalOperationParameters(pars); +// } +// +// private ApiInfo apiInfo() { +// return new ApiInfoBuilder() +// .title("b端 api") +// .description("b端 api") +// .termsOfServiceUrl("http://localhost:8000") +// .version("2.0") +// .build(); +// } +// +//} \ No newline at end of file diff --git a/mallinkBApi/src/main/java/com/iformall/config/WebMvcConfig.java b/mallinkBApi/src/main/java/com/iformall/config/WebMvcConfig.java index bb161ee16..6ac6ac0a3 100644 --- a/mallinkBApi/src/main/java/com/iformall/config/WebMvcConfig.java +++ b/mallinkBApi/src/main/java/com/iformall/config/WebMvcConfig.java @@ -45,7 +45,7 @@ public class WebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("swagger-ui.html") + registry.addResourceHandler("/doc.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); diff --git a/mallinkBApi/src/main/java/com/iformall/controller/BankController.java b/mallinkBApi/src/main/java/com/iformall/controller/BankController.java index 410c84bf2..b5c23e940 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/BankController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/BankController.java @@ -1,7 +1,9 @@ package com.iformall.controller; +import com.iformall.annotation.ApiVersion; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; +import com.iformall.constant.SwaggerConstant; import com.iformall.enums.EnumSharingReceiverAccountType; import com.iformall.service.bank.WxBankUtilService; import io.swagger.annotations.Api; @@ -26,6 +28,7 @@ public class BankController extends BaseController{ @Autowired private WxBankUtilService wxBankUtilService; + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("根据对私银行卡号获取开户银行") @GetMapping("/searchBanks") public ResultData searchBanks(String accountNumber) { diff --git a/mallinkBApi/src/main/resources/application-dev.yml b/mallinkBApi/src/main/resources/application-dev.yml index a7984316f..e139dbb4b 100644 --- a/mallinkBApi/src/main/resources/application-dev.yml +++ b/mallinkBApi/src/main/resources/application-dev.yml @@ -187,4 +187,19 @@ pos: logging: level: com.iformall.mapper: debug - path: ./logs/b \ No newline at end of file + path: ./logs/b + +swagger: + pre-path: ${server.servlet.context-path} + base-package: com.iformall.controller + title: 富茂_iformall_接口文档 + description: 前后端联调 + version: 1.0 + license: Apache + license-url: https://admintest.malls.iformall.com + terms-of-service-url: https://admintest.malls.iformall.com + host: https://admintest.malls.iformall.com + contact: + name: 张三 + url: https://admintest.malls.iformall.com + email: zhangsan@163.com \ No newline at end of file diff --git a/pom.xml b/pom.xml index 7b7d48735..3ceb51a69 100644 --- a/pom.xml +++ b/pom.xml @@ -27,6 +27,7 @@ mallinkTTCApi mallinkTTAdmin mallinkNeuPosAdmin + mallink-swagger