From 9690fff08ed902910a381bac2937bbbf3f5c55b5 Mon Sep 17 00:00:00 2001 From: ArgonarioD Date: Thu, 7 Jul 2022 11:10:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E6=96=87=E6=A1=A3=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=E4=BB=8ESpringfox=E6=9B=B4=E6=8D=A2=E4=B8=BA=E4=BA=86SpringDoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 +-- .../projectmanagement/ProjectManagement.java | 4 +- .../config/SpringDocConfig.java | 26 ++++++++++ .../config/SwaggerConfig.java | 50 ------------------- .../projectmanagement/config/WebConfig.java | 3 +- .../controller/ProjectController.java | 19 +++---- .../controller/ProjectGroupController.java | 12 ++--- .../controller/StaffController.java | 11 ++-- .../rmdjzz/projectmanagement/entity/Task.java | 4 +- .../utils/http/RequestPage.java | 6 +-- src/main/resources/application.yml | 5 +- 11 files changed, 56 insertions(+), 90 deletions(-) create mode 100644 src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SpringDocConfig.java delete mode 100644 src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SwaggerConfig.java diff --git a/pom.xml b/pom.xml index ce161c8..c9828d1 100644 --- a/pom.xml +++ b/pom.xml @@ -103,9 +103,9 @@ 1.2.9 - io.springfox - springfox-boot-starter - 3.0.0 + org.springdoc + springdoc-openapi-ui + 1.6.9 com.auth0 diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/ProjectManagement.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/ProjectManagement.java index 581cb25..55d76c0 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/ProjectManagement.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/ProjectManagement.java @@ -1,6 +1,6 @@ package cn.edu.hfut.rmdjzz.projectmanagement; -import io.swagger.annotations.Api; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; @@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RestController; * @author 佘语殊 * @since 2022/6/27 11:24 */ -@Api(tags = "hello") +@Tag(name = "hello") @SpringBootApplication(exclude = {SecurityAutoConfiguration.class}) @RestController public class ProjectManagement { diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SpringDocConfig.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SpringDocConfig.java new file mode 100644 index 0000000..e2e95f7 --- /dev/null +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SpringDocConfig.java @@ -0,0 +1,26 @@ +package cn.edu.hfut.rmdjzz.projectmanagement.config; + +import io.swagger.v3.oas.models.ExternalDocumentation; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author 佘语殊 + * @since 2022/6/27 11:24 + */ +@Configuration +public class SpringDocConfig { + @Bean + public OpenAPI openAPI() { + return new OpenAPI() + .info(new Info() + .title("项目管理系统") + .description("前后端接口文档") + .version("1.0")) + .externalDocs(new ExternalDocumentation() + .description("项目管理系统前后端接口文档") + .url("http://101.34.228.45:8080")); + } +} diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SwaggerConfig.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SwaggerConfig.java deleted file mode 100644 index 1110aa4..0000000 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SwaggerConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -package cn.edu.hfut.rmdjzz.projectmanagement.config; - -import com.fasterxml.classmate.TypeResolver; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.oas.annotations.EnableOpenApi; -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 java.util.ArrayList; - -/** - * @author 佘语殊 - * @since 2022/6/27 11:24 - */ -@Configuration -//@EnableSwagger2 //开启Swagger2 -@EnableOpenApi -public class SwaggerConfig { - - //配置 Swagger的Docket的Bean实例 - @Bean - public Docket docket(TypeResolver typeResolver){ - return new Docket(DocumentationType.OAS_30) - .apiInfo(apiInfo()) - .select() - .apis(RequestHandlerSelectors.basePackage("cn.edu.hfut.rmdjzz.projectmanagement")) - .paths(PathSelectors.any()) - .build() - .additionalModels(typeResolver.resolve(Integer.class)); - } - //配置Swagger 信息apiInfo - private ApiInfo apiInfo(){ - //作者信息 - Contact DEFAULT_CONTACT = new Contact("项目管理系统", "http://101.34.228.45:8080/", ""); - return new ApiInfo("前后端接口文档", - "", - "1.0", - "http://wuyize.ml/", - DEFAULT_CONTACT, - "", - "", - new ArrayList()); - } -} diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/WebConfig.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/WebConfig.java index c44e3c9..1ebfa09 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/WebConfig.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/WebConfig.java @@ -30,6 +30,7 @@ public class WebConfig implements WebMvcConfigurer { .addPathPatterns("/**") .excludePathPatterns("/hello", "/error") //测试 .excludePathPatterns("/staff/login") //登录 - .excludePathPatterns("/swagger-resources/**", "/swagger-ui/**", "/v2/**", "/v3/**", "/webjars/**", "/doc.html"); //swagger + .excludePathPatterns("/swagger-ui.html", "/swagger-resources/**", "/swagger-ui/**", + "/v2/**", "/v3/**", "/webjars/**", "/doc.html"); //swagger } } \ No newline at end of file diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectController.java index 4176531..d31c5cc 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectController.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectController.java @@ -9,15 +9,11 @@ import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.RequestPage; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseList; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import springfox.documentation.annotations.ApiIgnore; import javax.validation.Valid; import java.util.Map; @@ -35,17 +31,14 @@ public class ProjectController { @Autowired private IProjectGroupService projectGroupService; - @ApiOperation("根据Token获取该员工的ProjectList") - @ApiImplicitParams({ - @ApiImplicitParam(name = "paramMap", value = "参数列表见Project实体类,时间可以用xxxxStart与xxxxEnd来确定区间" - , required = true) - }) + @Operation(summary = "根据Token获取该员工的ProjectList") @SneakyThrows @GetMapping public ResponseList getProjectListOfStaff( @RequestHeader("Token") String token, @Valid RequestPage page, - @RequestParam("paramMap") Map paramMap + @Parameter(description = "参数列表见Project实体类,时间可以用xxxxStart与xxxxEnd来确定区间" + , required = true) @RequestParam("paramMap") Map paramMap ) { Page result = projectService.getOnePageProject(token, page, paramMap); return ResponseList.ofSuccess("成功返回列表", result); @@ -63,7 +56,7 @@ public class ProjectController { return ResponseMap.ofSuccess("查询成功", projectService.getById(projectId)); } - @ApiOperation("根据Token获取该员工的Project数") + @Operation(description = "根据Token获取该员工的Project数") @SneakyThrows @GetMapping("/count") public ResponseMap getProjectNumOfStaff(@RequestHeader("Token") String token) { diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java index b2742f4..aa02e34 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java @@ -7,9 +7,10 @@ import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseList; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiParam; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.media.SchemaProperty; import lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -64,16 +65,13 @@ public class ProjectGroupController { } //TODO: test - @ApiImplicitParams( - @ApiImplicitParam(paramType = "body", name = "positions", dataTypeClass = String.class, required = true) - ) @SneakyThrows @PutMapping("/{staffId}") public ResponseMap modifyDesignatedStaffPosition( @RequestHeader("Token") String token, @PathVariable Integer projectId, @PathVariable Integer staffId, - @ApiParam(hidden = true) @RequestBody GroupPositionVo groupPosition + @Parameter(description = "不需要在body中传递staffId,用path传递") @RequestBody GroupPositionVo groupPosition ) { projectGroupService.updateStaffPositions(token, staffId, projectId, groupPosition.getPositions()); return ResponseMap.ofSuccess("更新成功"); diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/StaffController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/StaffController.java index ae33d90..1a558d0 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/StaffController.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/StaffController.java @@ -4,8 +4,7 @@ import cn.edu.hfut.rmdjzz.projectmanagement.entity.Staff; import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException; import cn.edu.hfut.rmdjzz.projectmanagement.service.IStaffService; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; +import io.swagger.v3.oas.annotations.Parameter; import lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -20,12 +19,12 @@ public class StaffController { @Autowired private IStaffService staffService; - @ApiImplicitParams({ - @ApiImplicitParam(name = "staff", value = "只需要传入staffUsername和staffPassword两个属性即可,staffPassword需要md5加密后传输") - }) @SneakyThrows @PostMapping("/login") - public ResponseMap login(@RequestBody Staff staff) { + public ResponseMap login( + @Parameter(description = "只需要传入staffUsername和staffPassword两个属性即可,staffPassword需要md5加密后传输") + @RequestBody Staff staff + ) { return staffService.login(staff.getStaffUsername(), staff.getStaffPassword()); } diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/Task.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/Task.java index d439e70..fd17242 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/Task.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/Task.java @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; -import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; @@ -39,7 +39,7 @@ public class Task { private LocalDateTime taskClosedTime; private Integer taskPriority; private String taskDescription; - @ApiModelProperty( + @Schema(description = "demandSource:需求来源 (String), estimatedManHours:预估工时 (Integer), severity:严重程度 (String), recurrenceProbability:复现概率 (String)") @TableField(typeHandler = JacksonTypeHandler.class) private Map attachedInfo; diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/http/RequestPage.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/http/RequestPage.java index 727ffec..289e356 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/http/RequestPage.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/http/RequestPage.java @@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import io.swagger.annotations.ApiModelProperty; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.NoArgsConstructor; @@ -24,9 +24,9 @@ public class RequestPage { @NotNull @Min(1) Integer pageSize; - @ApiModelProperty("不传或传空时不排序,否则按照此字段排序") + @Schema(description = "不传或传空时不排序,否则按照此字段排序") String sortBy; - @ApiModelProperty("传true或空时为顺序排序,否则倒序排序") + @Schema(description = "传true或空时为顺序排序,否则倒序排序") Boolean asc; public IPage getPage() { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1e8f8be..45794b0 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -16,9 +16,6 @@ spring: max-idle: 8 min-idle: 0 password: weakPassword - mvc: - pathmatch: - matching-strategy: ant_path_matcher mybatis-plus: mapper-locations: classpath:mapper/*.xml configuration: @@ -32,3 +29,5 @@ server: charset: UTF-8 force: true enabled: true +springdoc: + packages-to-scan: cn.edu.hfut.rmdjzz.projectmanagement