springboot集成swagger3+swagger-bootstrap-ui及使用详解

1、引入 maven 依赖

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>

2、配置 swagger

@EnableOpenApi
@Configuration
public class Swagger3Config {
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.OAS_30)
                .securityContexts(securityContexts())
                .securitySchemes(securitySchemes())
                .apiInfo(builderApiInfo())
                .select()
                // 扫描所有带有 @ApiOperation 注解的类
                .apis( RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                // 扫描所有的 controller
//                .apis(RequestHandlerSelectors.basePackage("com.shenlanbao.product.library.management.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo builderApiInfo() {
        return   new ApiInfoBuilder()
                .contact(
                        new Contact(
                                "系统名称",
                                "系统地址(https://www.baidu.com)",
                                "邮箱地址(123456@163.com)"
                        )
                )
                .title("xxx项目接口文档")
                .description("xxxx项目接口文档")
                .version("1.0")
                .build();
    }

    /**
     * 配置请求头 token
     */
    private List<SecurityContext> securityContexts(){
        return Arrays.asList(SecurityContext.builder()
                .securityReferences(Arrays.asList(SecurityReference.builder()
                        .reference("token")
                        .scopes(new AuthorizationScope[]{new AuthorizationScope("global", "accessEverything")})
                        .build())).build());
    }

    /**
     * 配置请求头 token 参数
     */
    private List<SecurityScheme> securitySchemes(){
        return Arrays.asList(new ApiKey("token凭证", "token", "header"));
    }

}

其中 securityContexts() 与 securitySchemes() 是全局设置请求头参数,如不需要,则可以去掉。

3、拦截器放行(如没有拦截器,此步骤可忽略)

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private AuthInterceptor addPathPatterns;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 排除 swagger 访问的路径配置
        String[] swaggerExcludes = new String[]{
                "/swagger-ui/**",
                "/swagger-resources/**",
                "/webjars/**",
                "/v3/**",
                "/doc.html",
        };
        // 添加拦截器,配置拦截地址
        registry.addInterceptor(addPathPatterns)
                .addPathPatterns("/**")
                .excludePathPatterns(swaggerExcludes);
    }
}

4、访问

Swagger 访问路径: 地址/swagger-ui/index.html
	如:http://localhost:8180/swagger-ui/index.html
	
bootstrap-ui 访问地址:地址/doc.html
	如:http://localhost:8180/doc.html

5、使用详解

5.1 @Api

作用:在请求的类上添加该注解,表示对类的说明
参数:
tags=“说明该类的作用,可以在UI界面上看到的注解”
value=“也是说明该类的作用,可用用tags代替”
示例:

@Api(value = "疾病管理")
@RestController
public class DiseaseController {
	......
}

5.2 @ApiOperation

作用:在请求的方法上添加该注解,说明方法的用途、作用
参数:
value=“说明方法的用途、作用”
notes=“方法的备注说明”
示例:

   	@ApiOperation(value = "疾病列表(包含疾病程度)")
    @ApiImplicitParams({
                    @ApiImplicitParam(name = "labelId",value = "疾病标签ID",dataType = "String",paramType = "query",required = false),
                    @ApiImplicitParam(name = "diseaseStatus",value = "疾病状态",dataType = "String",paramType = "query",required = false),
                    @ApiImplicitParam(name = "intelligentUnderwritingId",value = "智能核保ID",dataType = "String",paramType = "query",required = false)
            })
    @GetMapping
    public Result<List<DiseaseListVO>> diseaseListAndLevel(@RequestParam(value = "labelId",required = false)String labelId,
                                                   @RequestParam(value = "diseaseStatus",required = false) String diseaseStatus,
                                                   @RequestParam(value = "intelligentUnderwritingId",required = false) String intelligentUnderwritingId) {
        return ResultUtils.success(tbDiseaseService.selectListAndLevel(labelId,diseaseStatus,intelligentUnderwritingId));
    }

5.3 @ApiImplicitParams 与 @ApiImplicitParam

作用:
@ApiImplicitParams:用在请求的方法上,表示一组参数说明
@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
注意 : 一般使用在GET请求中
参数:
@ApiImplicitParams 参数:@ApiImplicitParam
@ApiImplicitParam 参数:
name:参数名
value:参数的汉字说明、解释
required:参数是否必须传
paramType:参数放在哪个地方

  • header --> 请求参数的获取:@RequestHeader
  • query --> 请求参数的获取:@RequestParam
  • path(用于restful接口)–> 请求参数的获取:@PathVariable
  • div(不常用)
  • form(不常用)

dataType:参数类型,默认String,其它值dataType=“Integer”
defaultValue:参数的默认值

示例如 5.2 所示。

5.4 @ApiResponses 与 @ApiResponse (一般情况无需设置)

作用:
@ApiResponses:用在请求的方法上,表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
参数:
code:数字,例如400
message:信息,例如"请求参数没填好"
response:抛出异常的类
示例:

    @ApiOperation(value = "疾病列表(无疾病程度)")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "labelId",value = "疾病标签ID",dataType = "String",paramType = "query",required = false),
            @ApiImplicitParam(name = "diseaseStatus",value = "疾病状态",dataType = "String",paramType = "query",required = false),
            @ApiImplicitParam(name = "intelligentUnderwritingId",value = "智能核保ID",dataType = "String",paramType = "query",required = false)
    })
    @ApiResponses(
            {
            @ApiResponse(code = 400,message = "请求失败"),
            @ApiResponse(code = 200,message = "请求成功"),
        }
    )
    @GetMapping("/list")
    public Result<List<DiseaseListVO>> diseaseList(@RequestParam(value = "labelId",required = false)String labelId,
                                                   @RequestParam(value = "diseaseStatus",required = false) String diseaseStatus,
                                                   @RequestParam(value = "intelligentUnderwritingId",required = false) String intelligentUnderwritingId) {
        return ResultUtils.success(tbDiseaseService.selectList(labelId,diseaseStatus,intelligentUnderwritingId));
    }

5.5 @ApiModel 与 @ApiModelProperty

作用:
@ApiModel:用于响应类上,表示一个返回响应数据的信息
@ApiModelProperty:用在属性上,描述响应类的属性
示例:

@ApiModel(value = "疾病详情实体")
@Data
public class DiseaseDetailDTO {

    @ApiModelProperty("疾病id")
    private String diseaseId;

    @ApiModelProperty("疾病描述")
    private String diseaseDesc;

    @ApiModelProperty("疾病别名集合")
    private List<DiseaseAliasNameDTO> aliasNameList;
}

至此,swagger 常用的知识点到此为止。

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值