From 24e88c5a8e91e139d92a6d48beefef84684db263 Mon Sep 17 00:00:00 2001 From: xmzhao71 Date: Thu, 26 Oct 2023 17:29:57 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0swagger=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 31 ++--- suimang-swagger/pom.xml | 28 ++++ .../com/iformall/annotation/ApiVersion.java | 19 +++ .../annotation/BaseEnableSwagger.java | 14 ++ .../iformall/config/SwaggerConfiguration.java | 94 +++++++++++++ .../iformall/config/SwaggerProperties.java | 123 ++++++++++++++++++ .../iformall/constant/SwaggerConstant.java | 8 ++ suimang.iml | 19 +-- .../java/com/iformall/AdminApplication.java | 3 +- .../java/com/iformall/config/ShiroConfig.java | 1 + .../com/iformall/config/Swagger2Config.java | 122 ++++++++--------- .../java/com/iformall/config/WebConfig.java | 4 +- .../controller/sm/ApiGuideController.java | 5 + .../controller/sm/ApiMenuController.java | 7 + .../controller/sm/ServiceInfoController.java | 6 + .../sm/ThirdPartyApiController.java | 5 + .../controller/sys/HomeController.java | 4 + .../controller/sys/MallRoleController.java | 6 +- .../sys/MallUserInfoController.java | 8 ++ .../controller/sys/SysMenuController.java | 3 + .../src/main/resources/application-dev.yml | 16 ++- .../main/java/com/iformall/CApplication.java | 2 + .../com/iformall/config/Swagger2Config.java | 122 ++++++++--------- .../com/iformall/config/WebMvcConfig.java | 4 +- .../controller/ApiGuideController.java | 3 + .../controller/ApiMenuController.java | 5 + .../src/main/resources/application-dev.yml | 14 ++ suimangService/pom.xml | 5 + .../iformall/service/sm/ApiGuideService.java | 2 + 29 files changed, 525 insertions(+), 158 deletions(-) create mode 100644 suimang-swagger/pom.xml create mode 100644 suimang-swagger/src/main/java/com/iformall/annotation/ApiVersion.java create mode 100644 suimang-swagger/src/main/java/com/iformall/annotation/BaseEnableSwagger.java create mode 100644 suimang-swagger/src/main/java/com/iformall/config/SwaggerConfiguration.java create mode 100644 suimang-swagger/src/main/java/com/iformall/config/SwaggerProperties.java create mode 100644 suimang-swagger/src/main/java/com/iformall/constant/SwaggerConstant.java diff --git a/pom.xml b/pom.xml index 88f570e..a6615de 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,7 @@ suimangSchedule suimangMQConsumer open-api + suimang-swagger @@ -186,21 +187,21 @@ - - io.springfox - springfox-swagger2 - 2.8.0 - - - io.springfox - springfox-swagger-ui - 2.8.0 - - - io.springfox - springfox-spring-web - 2.8.0 - + + + + + + + + + + + + + + + com.fasterxml.jackson.core jackson-core diff --git a/suimang-swagger/pom.xml b/suimang-swagger/pom.xml new file mode 100644 index 0000000..b4352b0 --- /dev/null +++ b/suimang-swagger/pom.xml @@ -0,0 +1,28 @@ + + + + suimang + com.iformall + 1.0 + + 4.0.0 + + suimang-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/suimang-swagger/src/main/java/com/iformall/annotation/ApiVersion.java b/suimang-swagger/src/main/java/com/iformall/annotation/ApiVersion.java new file mode 100644 index 0000000..d9ceb4e --- /dev/null +++ b/suimang-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/suimang-swagger/src/main/java/com/iformall/annotation/BaseEnableSwagger.java b/suimang-swagger/src/main/java/com/iformall/annotation/BaseEnableSwagger.java new file mode 100644 index 0000000..fb78b80 --- /dev/null +++ b/suimang-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/suimang-swagger/src/main/java/com/iformall/config/SwaggerConfiguration.java b/suimang-swagger/src/main/java/com/iformall/config/SwaggerConfiguration.java new file mode 100644 index 0000000..f8b7214 --- /dev/null +++ b/suimang-swagger/src/main/java/com/iformall/config/SwaggerConfiguration.java @@ -0,0 +1,94 @@ +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.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 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.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; + + /** + * 1、分组 + * 2、切换分组,修改访问/v2/api-docs/ 接口的路径 + * https://admintest.malls.iformall.com/v2/api-docs/ + * https://admintest.malls.iformall.com/B/v2/api-docs/ + * + * @param servletContext + * @return {@link Docket} + */ + @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()) + .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(); + } + + 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(); + } +} + diff --git a/suimang-swagger/src/main/java/com/iformall/config/SwaggerProperties.java b/suimang-swagger/src/main/java/com/iformall/config/SwaggerProperties.java new file mode 100644 index 0000000..b43bae8 --- /dev/null +++ b/suimang-swagger/src/main/java/com/iformall/config/SwaggerProperties.java @@ -0,0 +1,123 @@ +package com.iformall.config; + +import lombok.Data; +import lombok.NoArgsConstructor; +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(); + /** + * 全局统一鉴权配置 + **/ + private Authorization authorization = new Authorization(); + + @Data + public static class Contact { + /** + * 联系人 + **/ + private String name = ""; + /** + * 联系人url + **/ + private String url = ""; + /** + * 联系人email + **/ + private String email = ""; + } + + @Data + @NoArgsConstructor + public static class Authorization { + + /** + * 鉴权策略ID,需要和SecurityReferences ID保持一致 + */ + private String name = ""; + + /** + * 需要开启鉴权URL的正则 + */ + private String authRegex = "^.*$"; + + /** + * 鉴权作用域列表 + */ + private List authorizationScopeList = new ArrayList<>(); + + private List tokenUrlList = new ArrayList<>(); + } + + @Data + @NoArgsConstructor + public static class AuthorizationScope { + + /** + * 作用域名称 + */ + private String scope = ""; + + /** + * 作用域描述 + */ + private String description = ""; + + } +} diff --git a/suimang-swagger/src/main/java/com/iformall/constant/SwaggerConstant.java b/suimang-swagger/src/main/java/com/iformall/constant/SwaggerConstant.java new file mode 100644 index 0000000..db4158c --- /dev/null +++ b/suimang-swagger/src/main/java/com/iformall/constant/SwaggerConstant.java @@ -0,0 +1,8 @@ +package com.iformall.constant; + +public interface SwaggerConstant { + /** + * + */ + String V_1_0_0 = "v1.0.0"; +} diff --git a/suimang.iml b/suimang.iml index bb300b6..c7b2669 100644 --- a/suimang.iml +++ b/suimang.iml @@ -25,6 +25,7 @@ + @@ -161,7 +162,7 @@ - + @@ -184,21 +185,6 @@ - - - - - - - - - - - - - - - @@ -239,6 +225,7 @@ + diff --git a/suimangAdmin/src/main/java/com/iformall/AdminApplication.java b/suimangAdmin/src/main/java/com/iformall/AdminApplication.java index 0284ebf..cfc34ca 100644 --- a/suimangAdmin/src/main/java/com/iformall/AdminApplication.java +++ b/suimangAdmin/src/main/java/com/iformall/AdminApplication.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; @@ -18,7 +19,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; */ @SpringBootApplication @MapperScan(basePackages = {"com.iformall.mapper"}) -@EnableSwagger2 +@BaseEnableSwagger @EnableEncryptableProperties @EnableAsync @EnableRocketMQ diff --git a/suimangAdmin/src/main/java/com/iformall/config/ShiroConfig.java b/suimangAdmin/src/main/java/com/iformall/config/ShiroConfig.java index 75223d8..9ba5a6e 100644 --- a/suimangAdmin/src/main/java/com/iformall/config/ShiroConfig.java +++ b/suimangAdmin/src/main/java/com/iformall/config/ShiroConfig.java @@ -139,6 +139,7 @@ public class ShiroConfig { // } // swagger-ui filterChainDefinitionMap.put("/swagger-ui.html", "anon"); + filterChainDefinitionMap.put("/doc.html", "anon"); filterChainDefinitionMap.put("/v2/**", "anon"); filterChainDefinitionMap.put("/swagger-resources/**", "anon"); filterChainDefinitionMap.put("/webjars/**", "anon"); diff --git a/suimangAdmin/src/main/java/com/iformall/config/Swagger2Config.java b/suimangAdmin/src/main/java/com/iformall/config/Swagger2Config.java index 335b86b..fc80b3b 100644 --- a/suimangAdmin/src/main/java/com/iformall/config/Swagger2Config.java +++ b/suimangAdmin/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/suimangAdmin/src/main/java/com/iformall/config/WebConfig.java b/suimangAdmin/src/main/java/com/iformall/config/WebConfig.java index d4e0620..7064277 100644 --- a/suimangAdmin/src/main/java/com/iformall/config/WebConfig.java +++ b/suimangAdmin/src/main/java/com/iformall/config/WebConfig.java @@ -100,7 +100,9 @@ public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("swagger-ui.html") +// registry.addResourceHandler("swagger-ui.html") +// .addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("doc.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sm/ApiGuideController.java b/suimangAdmin/src/main/java/com/iformall/controller/sm/ApiGuideController.java index 9647b92..e4bcf22 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/sm/ApiGuideController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/sm/ApiGuideController.java @@ -1,6 +1,8 @@ package com.iformall.controller.sm; +import com.iformall.annotation.ApiVersion; import com.iformall.common.ResultData; +import com.iformall.constant.SwaggerConstant; import com.iformall.domain.dto.sm.SaveApiGuideDTO; import com.iformall.domain.dto.sm.UpdateApiGuideDTO; import com.iformall.domain.po.sm.ApiGuide; @@ -18,12 +20,14 @@ public class ApiGuideController { @Autowired private ApiGuideService apiGuideService; + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("分页查询api指南") @GetMapping("/page") public ResultData pageApiGuide(ApiGuide apiGuide, Integer pageNum, Integer pageSize) { return new ResultData(apiGuideService.pageApiGuide(apiGuide, pageNum, pageSize)); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("新增api指南") @PostMapping("/save") public ResultData saveApiGuide(@RequestBody SaveApiGuideDTO dto) { @@ -31,6 +35,7 @@ public class ApiGuideController { return new ResultData(); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("修改api指南") @PostMapping("/update") public ResultData updateApiGuide(@RequestBody UpdateApiGuideDTO dto) { diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sm/ApiMenuController.java b/suimangAdmin/src/main/java/com/iformall/controller/sm/ApiMenuController.java index 00c32d1..75e8dd3 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/sm/ApiMenuController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/sm/ApiMenuController.java @@ -1,7 +1,9 @@ package com.iformall.controller.sm; +import com.iformall.annotation.ApiVersion; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; +import com.iformall.constant.SwaggerConstant; import com.iformall.domain.dto.sm.SaveApiMenuDTO; import com.iformall.domain.dto.sm.UpdateApiMenuDTO; import com.iformall.domain.po.sm.ApiMenu; @@ -20,12 +22,14 @@ public class ApiMenuController { @Autowired private ApiMenuService apiMenuService; + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("分页查询api菜单") @GetMapping("/page") public ResultData pageApiMenu(ApiMenu ApiMenu, Integer pageNum, Integer pageSize) { return new ResultData(apiMenuService.pageApiMenu(ApiMenu, pageNum, pageSize)); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("单个查询api菜单") @GetMapping("/get") public ResultData getApiMenu(Long id) { @@ -35,6 +39,7 @@ public class ApiMenuController { return new ResultData(apiMenuService.getApiMenu(id)); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("新增api菜单") @PostMapping("/save") public ResultData saveApiMenu(@RequestBody SaveApiMenuDTO dto) { @@ -42,6 +47,7 @@ public class ApiMenuController { return new ResultData(); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("修改api菜单") @PostMapping("/update") public ResultData updateApiMenu(@RequestBody UpdateApiMenuDTO dto) { @@ -49,6 +55,7 @@ public class ApiMenuController { return new ResultData(); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("全查询父级api菜单") @GetMapping("/listParentMenu") public ResultData listParentMenu() { diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sm/ServiceInfoController.java b/suimangAdmin/src/main/java/com/iformall/controller/sm/ServiceInfoController.java index 843b80e..c8f290f 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/sm/ServiceInfoController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/sm/ServiceInfoController.java @@ -1,6 +1,8 @@ package com.iformall.controller.sm; +import com.iformall.annotation.ApiVersion; import com.iformall.common.ResultData; +import com.iformall.constant.SwaggerConstant; import com.iformall.controller.base.BaseController; import com.iformall.domain.dto.sm.SaveServiceInfoDTO; import com.iformall.domain.dto.sm.UpdateServiceInfoDTO; @@ -20,12 +22,14 @@ public class ServiceInfoController extends BaseController { @Autowired private ServiceInfoService serviceInfoService; + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("分页查询合作商") @GetMapping("/page") public ResultData pageServiceInfo(ServiceInfo serviceInfo, Integer pageNum, Integer pageSize) { return new ResultData(serviceInfoService.pageServiceInfo(serviceInfo, pageNum, pageSize)); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("新增合作商") @PostMapping("/save") public ResultData saveServiceInfo(@RequestBody SaveServiceInfoDTO dto) { @@ -33,6 +37,7 @@ public class ServiceInfoController extends BaseController { return new ResultData(); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("修改合作商") @PostMapping("/update") public ResultData updateServiceInfo(@RequestBody UpdateServiceInfoDTO dto) { @@ -40,6 +45,7 @@ public class ServiceInfoController extends BaseController { return new ResultData(); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("修改合作商状态") @PostMapping("/updateStatus") public ResultData updateServiceInfoStatus(@RequestBody UpdateServiceInfoStatusDTO dto) { diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sm/ThirdPartyApiController.java b/suimangAdmin/src/main/java/com/iformall/controller/sm/ThirdPartyApiController.java index 7f203ce..3c493b8 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/sm/ThirdPartyApiController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/sm/ThirdPartyApiController.java @@ -1,7 +1,9 @@ package com.iformall.controller.sm; +import com.iformall.annotation.ApiVersion; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; +import com.iformall.constant.SwaggerConstant; import com.iformall.domain.dto.sm.UpdateThirdPartyApiStatusDTO; import com.iformall.domain.po.WxThirdPartyApi; import com.iformall.exception.BizException; @@ -19,12 +21,14 @@ public class ThirdPartyApiController { @Autowired private WxThirdPartyApiService thirdPartyApiService; + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("分页查询秘钥") @GetMapping("/page") public ResultData pageThirdPartyApi(WxThirdPartyApi thirdPartyApi, Integer pageNum, Integer pageSize) { return new ResultData(thirdPartyApiService.pageThirdPartyApi(thirdPartyApi, pageNum, pageSize)); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("单个查询秘钥") @GetMapping("/get") public ResultData getThirdPartyApi(Long id) { @@ -34,6 +38,7 @@ public class ThirdPartyApiController { return new ResultData(thirdPartyApiService.getThirdPartyApi(id)); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("修改秘钥状态") @PostMapping("/updateStatus") public ResultData updateThirdPartyApiStatus(@RequestBody UpdateThirdPartyApiStatusDTO dto) { diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sys/HomeController.java b/suimangAdmin/src/main/java/com/iformall/controller/sys/HomeController.java index a524769..8923a08 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/sys/HomeController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/sys/HomeController.java @@ -2,9 +2,11 @@ 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.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.*; import com.iformall.domain.po.base.TenantEntity; @@ -75,6 +77,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 { @@ -97,6 +100,7 @@ public class HomeController extends BaseController { IOUtils.closeQuietly(out); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("登录") @PostMapping("/doLogin") public ResultData login(@RequestBody MallUserInfo user, HttpServletResponse response) { diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sys/MallRoleController.java b/suimangAdmin/src/main/java/com/iformall/controller/sys/MallRoleController.java index 3ad9ded..92e3efb 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/sys/MallRoleController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/sys/MallRoleController.java @@ -1,10 +1,12 @@ package com.iformall.controller.sys; import com.github.pagehelper.PageInfo; +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.*; import com.iformall.domain.po.base.BaseEntity; @@ -43,6 +45,7 @@ public class MallRoleController extends BaseController { @Autowired private MallUserRoleService mallUserRoleService; + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("角色列表") @GetMapping("list") @ApiImplicitParams({ @@ -95,7 +98,7 @@ public class MallRoleController extends BaseController { return new ResultData(role); } - + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("角色保存") @PostMapping("saveOrUpdate") //@RequiresPermissions("sys:role:save") @@ -126,6 +129,7 @@ public class MallRoleController extends BaseController { return new ResultData(); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("角色删除") @PostMapping("/del") //@RequiresPermissions("sys:role:del") diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sys/MallUserInfoController.java b/suimangAdmin/src/main/java/com/iformall/controller/sys/MallUserInfoController.java index fa22251..5c583c3 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/sys/MallUserInfoController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/sys/MallUserInfoController.java @@ -1,10 +1,12 @@ package com.iformall.controller.sys; import com.github.pagehelper.PageInfo; +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.*; import com.iformall.domain.po.base.BaseEntity; @@ -60,6 +62,7 @@ public class MallUserInfoController extends BaseController { @Autowired WxMsgValidationcodeService wxMsgValidationcodeService; + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation(value = "用户分页接口", response = String.class) @GetMapping("lists") //@RequiresPermissions("sys:user:list") @@ -110,6 +113,7 @@ public class MallUserInfoController extends BaseController { return new ResultData(user); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation(value = "创建用户接口", response = String.class) @PostMapping("add") //@RequiresPermissions("sys:user:add") @@ -147,6 +151,7 @@ public class MallUserInfoController extends BaseController { return new ResultData(userInfo); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation(value = "修改用户接口", response = String.class) @PostMapping("update") //@RequiresPermissions("sys:user:update") @@ -225,6 +230,7 @@ public class MallUserInfoController extends BaseController { return new ResultData(); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation(value = "删除用户接口", response = String.class) @PostMapping("/del") //@RequiresPermissions("sys:user:del") @@ -320,6 +326,7 @@ public class MallUserInfoController extends BaseController { return new ResultData(menu); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation(value = "用户密码发送验证码") @GetMapping("sendvalidationcode") @ApiImplicitParams({ @@ -353,6 +360,7 @@ public class MallUserInfoController extends BaseController { return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation(value = "修改密码", notes = "{\"userName\",\"string\",\"code\",\"string\",\"pwd\",\"string\"}") @PostMapping("/updatepwd") @SystemControllerLog(description = "用户管理-修改密码") diff --git a/suimangAdmin/src/main/java/com/iformall/controller/sys/SysMenuController.java b/suimangAdmin/src/main/java/com/iformall/controller/sys/SysMenuController.java index 26fd86c..165d5b9 100644 --- a/suimangAdmin/src/main/java/com/iformall/controller/sys/SysMenuController.java +++ b/suimangAdmin/src/main/java/com/iformall/controller/sys/SysMenuController.java @@ -1,9 +1,11 @@ package com.iformall.controller.sys; +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.MallPermission; import com.iformall.domain.po.MallRole; @@ -65,6 +67,7 @@ public class SysMenuController extends BaseController { return new ResultData(map); } + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("所有菜单列表") @GetMapping("list") //@RequiresPermissions("sys:menu:list") diff --git a/suimangAdmin/src/main/resources/application-dev.yml b/suimangAdmin/src/main/resources/application-dev.yml index 5eaf35c..e57bf5e 100644 --- a/suimangAdmin/src/main/resources/application-dev.yml +++ b/suimangAdmin/src/main/resources/application-dev.yml @@ -208,4 +208,18 @@ suimang: photo_speak_hy: xxx digital_avatar: xxx digital_avatar_hy: xxx - callbackUrl: xxx \ No newline at end of file + callbackUrl: xxx + +swagger: + base-package: com.iformall.controller + title: 遂芒_metavatar_接口文档 + description: 前后端联调 + version: 1.0 + license: Apache + license-url: https://mtest.metavatar.cc/ + terms-of-service-url: https://mtest.metavatar.cc/ + host: localhost:8888 + contact: + name: 张三 + url: https://mtest.metavatar.cc/ + email: zhangsan@163.com \ No newline at end of file diff --git a/suimangCApi/src/main/java/com/iformall/CApplication.java b/suimangCApi/src/main/java/com/iformall/CApplication.java index d916e1b..32fda08 100644 --- a/suimangCApi/src/main/java/com/iformall/CApplication.java +++ b/suimangCApi/src/main/java/com/iformall/CApplication.java @@ -1,5 +1,6 @@ package com.iformall; +import com.iformall.annotation.BaseEnableSwagger; import org.mybatis.spring.annotation.MapperScan; import org.rocketmq.starter.annotation.EnableRocketMQ; import org.springframework.beans.factory.annotation.Value; @@ -15,6 +16,7 @@ import org.springframework.scheduling.annotation.EnableAsync; * @author chenkx * @date 2017-12-26 */ +@BaseEnableSwagger @SpringBootApplication @MapperScan(basePackages = {"com.iformall.mapper"}) @EnableEncryptableProperties diff --git a/suimangCApi/src/main/java/com/iformall/config/Swagger2Config.java b/suimangCApi/src/main/java/com/iformall/config/Swagger2Config.java index 2118b9d..6d22331 100644 --- a/suimangCApi/src/main/java/com/iformall/config/Swagger2Config.java +++ b/suimangCApi/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("c端 api") - .description("c 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("c端 api") +// .description("c api") +// .termsOfServiceUrl("http://localhost:7000") +// .version("2.0") +// .build(); +// } +// +//} \ No newline at end of file diff --git a/suimangCApi/src/main/java/com/iformall/config/WebMvcConfig.java b/suimangCApi/src/main/java/com/iformall/config/WebMvcConfig.java index c406405..66deea2 100644 --- a/suimangCApi/src/main/java/com/iformall/config/WebMvcConfig.java +++ b/suimangCApi/src/main/java/com/iformall/config/WebMvcConfig.java @@ -54,7 +54,9 @@ public class WebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("swagger-ui.html") +// registry.addResourceHandler("swagger-ui.html") +// .addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("doc.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); diff --git a/suimangCApi/src/main/java/com/iformall/controller/ApiGuideController.java b/suimangCApi/src/main/java/com/iformall/controller/ApiGuideController.java index f82a9e6..f8a73df 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/ApiGuideController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/ApiGuideController.java @@ -1,7 +1,9 @@ package com.iformall.controller; +import com.iformall.annotation.ApiVersion; import com.iformall.annotation.AuthIgnore; import com.iformall.common.ResultData; +import com.iformall.constant.SwaggerConstant; import com.iformall.service.sm.ApiGuideService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -19,6 +21,7 @@ public class ApiGuideController { private ApiGuideService apiGuideService; @AuthIgnore + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("单个查询api指南") @GetMapping("/getAvailableApiGuide") public ResultData getAvailableApiGuide() { diff --git a/suimangCApi/src/main/java/com/iformall/controller/ApiMenuController.java b/suimangCApi/src/main/java/com/iformall/controller/ApiMenuController.java index 0c221fe..ffef77d 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/ApiMenuController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/ApiMenuController.java @@ -1,8 +1,10 @@ package com.iformall.controller; +import com.iformall.annotation.ApiVersion; import com.iformall.annotation.AuthIgnore; import com.iformall.common.ErrorCode; import com.iformall.common.ResultData; +import com.iformall.constant.SwaggerConstant; import com.iformall.exception.BizException; import com.iformall.service.sm.ApiMenuService; import io.swagger.annotations.Api; @@ -19,6 +21,7 @@ public class ApiMenuController { private ApiMenuService apiMenuService; @AuthIgnore + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("全查询api菜单") @GetMapping("/list") public ResultData listApiMenu() { @@ -26,6 +29,7 @@ public class ApiMenuController { } @AuthIgnore + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("查询某个api菜单所有子菜单") @GetMapping("/listSubmenu") public ResultData listApiSubmenu(Long id) { @@ -36,6 +40,7 @@ public class ApiMenuController { } @AuthIgnore + @ApiVersion(group = SwaggerConstant.V_1_0_0) @ApiOperation("单个查询菜单详情") @GetMapping("/get") public ResultData getApiMenu(Long id) { diff --git a/suimangCApi/src/main/resources/application-dev.yml b/suimangCApi/src/main/resources/application-dev.yml index 83ec583..62490a9 100644 --- a/suimangCApi/src/main/resources/application-dev.yml +++ b/suimangCApi/src/main/resources/application-dev.yml @@ -195,3 +195,17 @@ suimang: digital_avatar: http://nas.pucao.cn:2005 digital_avatar_hy: http://nas.pucao.cn:2003 callbackUrl: https://mtest.metavatar.cc/C + +swagger: + base-package: com.iformall.controller + title: 遂芒_metavatar_接口文档 + description: 前后端联调 + version: 1.0 + license: Apache + license-url: https://mtest.metavatar.cc/ + terms-of-service-url: https://mtest.metavatar.cc/ + host: localhost:8888 + contact: + name: 张三 + url: https://mtest.metavatar.cc/ + email: zhangsan@163.com \ No newline at end of file diff --git a/suimangService/pom.xml b/suimangService/pom.xml index 181bb3c..60d406e 100644 --- a/suimangService/pom.xml +++ b/suimangService/pom.xml @@ -20,6 +20,11 @@ compile --> + + com.iformall + suimang-swagger + 1.0 + com.iformall suimangVideo diff --git a/suimangService/src/main/java/com/iformall/service/sm/ApiGuideService.java b/suimangService/src/main/java/com/iformall/service/sm/ApiGuideService.java index 71b3f01..23396c4 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/ApiGuideService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/ApiGuideService.java @@ -16,4 +16,6 @@ public interface ApiGuideService extends IService { void saveApiGuide(SaveApiGuideDTO dto); void updateApiGuide(UpdateApiGuideDTO dto); + + ApiGuide getAvailableApiGuide(); }