本文介绍: 上,通过tags指定指定名称(左侧菜单名称),tags可以指定多个值,多种使用场景通过指定相同tag值将所有的API分组在一起。用于指定POJO类的描述,提供更可读的类型名称(这个个人觉得没用,直接展示现有类名挺好)。用于注解到Controller上的方法对应一个对外提供的接口相同作用,但是不把注解混合代码内部,可读性更强,个人更喜欢这种方式。当请求响应是POJO的时候特别有用,现实场景中这又是最常用的情况。字段,如果参数自定义的类,会同时显示在。方法的表现基本一致,没发现注解特殊意义。
1. 启用Swagger
1.1 启用注解扫描文档接口

直接在POM文件引入依赖

<dependency>
    <groupId&gt;io.springfox</groupId&gt;
    <artifactId&gt;springfox-swagger2</artifactId&gt;
    <version&gt;2.9.2</version&gt;
</dependency&gt;
1.2 启动swaggerui

目前看到选项有2个:

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    <dependency>
      <groupId>com.github.xiaoymin</groupId>
      <artifactId>swagger-bootstrap-ui</artifactId>
      <version>${lastVersion}</version>
    </dependency>

我更喜欢swaggerbootstrap-ui风格

1.3 创建Swagger配置
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {

        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
    //                .apis(RequestHandlerSelectors.any())
                    .apis(RequestHandlerSelectors.basePackage("com.dwpro"))
                    .paths(PathSelectors.any())
                    .build();
        }

        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("标题lws") //标题
                    .description("简介lws") //简介
                    .termsOfServiceUrl("服务条款lws") //服务条款
                    .contact(new Contact("randy", "", "randy@gmail.com"))
                    .version("1.0.lws") //版本
                    .build();
        }
    }

在这里插入图片描述

2. 注解
2.1 @Api

@Api注解在Controller上,通过tags指定指定名称(左侧菜单名称),tags可以指定多个值,多种使用场景通过指定相同的tag值将所有的API分组在一起。

@Api还有valuedescription属性description已经@Deprecatedvalue号称会被当成tags值,实际测试下来无效

    @RestController
    @RequestMapping("/v1")
    @Api(tags = {"测试Swagger的注解使用"})
    public class HelloworldController {
    }

在这里插入图片描述

2.2 @ApiOperation

@ApiOperation用于注解到Controller上的方法对应一个对外提供的接口。目前有4个属性:

属性 描述
value 操作简单说明
notes 对操作的详细说明
httpMethod HTTP请求类型,可选:GET HEAD POST PUT DELETE OPTIONS PATCH
code HTTP状态码,默认为200
produces 输出的Content-Type
consumes 输入的Content-Type

示例

    @RequestMapping("say")
    @ApiOperation(value = "用于打印用户输入信息", notes = "这是个什么鬼啊啊啊", httpMethod = "GET")
    public String say(@RequestParam("message") String message) {
        return message;
    }

在这里插入图片描述

2.3 @ApiParam
属性 描述
name 参数名称,因此这个一般应该字母
value 参数说明
defaultValue 参数默认值
required 参数是否必须

参数类型会通过反射获取,如果参数是基本类型显示数据类型字段,如果参数是自定义的类,会同时显示数据类型schema字段

2.3.1 示例: query param

基本上只有value字段对接说明有意义, example字段是在页面调试给的示例

@RequestMapping("say")
@ApiOperation(value = "用于打印用户输入信息", notes = "这是个什么鬼啊啊啊", httpMethod = "GET")
public String say(@ApiParam(value = "参数描述", example = "10086") @RequestParam("message") Integer message) {
    return "";
}

在这里插入图片描述

2.3.2 示例: 使用请求体,并用一个对象接收参数

使用@RequestBody的场景下,指定@ApiParam唯一有用的属性value,指定其他参数没有效果

    @PostMapping("say2")
    @ApiOperation(value = "测试请求体", notes = "这是个什么鬼啊啊啊", httpMethod = "POST")
    public String say2(@ApiParam(value = "参数描述") @RequestBody ApFissionLog apFissionLog) {
        return "";
    }

在这里插入图片描述

2.4 @ApiImplicitParams 和 @ApiImplicitParam

@ApiParam相同作用,但是不把注解混合到代码内部,可读性更强,个人更喜欢这种方式

    @PostMapping("say3")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "cavatar",value = "value1",example = "10001", dataType = "int", paramType = "query"),
            @ApiImplicitParam(name = "cnickname",value = "value2",example = "example2", dataType = "string", paramType = "query")
    })
    public String say3(@RequestParam("cavatar") String cavatar, @RequestParam("cnickname") String cnickname) {
        return "";
    }

在这里插入图片描述

2.5 @ApiResponse

定义接口的返回值示例say4say5方法的表现基本一致,没发现注解的特殊意义

属性 描述
code HTTP状态
message 状态码的文本描述
response 返回值class
responseContainer 返回容器类型时使用,有效值: List Set Map
    @PostMapping("say4")
    public ApFissionLog say4(@RequestParam("cavatar") String cavatar, @RequestParam("cnickname") String cnickname) {
        return new ApFissionLog();
    }

    @PostMapping("say5")
    @ApiResponse(code = 200,message = "返回描述", response = ApFissionLog.class)
    public ApFissionLog say5(@RequestParam("cavatar") String cavatar, @RequestParam("cnickname") String cnickname) {
        return new ApFissionLog();
    }
2.6 @ApiModel和@ApiModelProperty

当请求和响应是POJO的时候特别有用,现实场景中这又是最常用的情况。

@ApiModel用于指定POJO类的描述,提供更可读的类型名称(这个个人觉得没用,直接展示现有类名挺好)。

属性 描述
value model别名默认类名
description model详细描述

@ApiModelProperty用于描述POJO里的字段

属性 描述
value 属性简短描述
example 属性的示例值
required 是否为必须值
    @PostMapping("say6")
    @ApiOperation(value = "测试请求体", notes = "这是个什么鬼啊啊啊", httpMethod = "POST")
    public ApFissionLog say6(@RequestBody ApFissionLog apFissionLog) {
        return new ApFissionLog();
    }

通过在ApFissionLog类上添加注解


@ApiModel(value = "model名字", description = "描述信息")
public class ApFissionLog {

    @ApiModelProperty(value = "C用户的昵称", notes = "notes", example = "AAA-BBB-CCC", required = true)
    private String cnickname;
    @ApiModelProperty(value = "C用户的头像", notes = "notes", example = "http://www.aaa.com/avtar.png", required = true)
    private String cavatar;

}

在这里插入图片描述

3. API分组

通过在Swagger的配置类里创建两个Docket对象扫描不同的包就能完成分

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean("defaultApi")
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("分组1")
                .select()
//                .apis(RequestHandlerSelectors.any())
                .apis(RequestHandlerSelectors.basePackage("com.dwpro"))
                .paths(PathSelectors.any())
                .build();
    }

    @Bean("groupApi")
    public Docket createGroupApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("分组2")
                .select()
//                .apis(RequestHandlerSelectors.any())
                .apis(RequestHandlerSelectors.basePackage("com.dwpro"))
                .paths(PathSelectors.any())
                .build();
    }


    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("标题lws") //标题
                .description("简介lws") //简介
                .termsOfServiceUrl("服务条款lws") //服务条款
                .contact(new Contact("randy", "", "randy@gmail.com"))
                .version("1.0.lws") //版本
                .build();
    }
}

在这里插入图片描述

4. 完整示例
4.1 pom.xml 添加依赖
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>

    <dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>swagger-bootstrap-ui</artifactId>
        <version>1.9.6</version>
    </dependency>
4.2 Swagger Config 类
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean("defaultApi")
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("分组1")
                .select()
//                .apis(RequestHandlerSelectors.any())
                .apis(RequestHandlerSelectors.basePackage("com.dwpro"))
                .paths(PathSelectors.any())
                .build();
    }

    @Bean("groupApi")
    public Docket createGroupApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("分组2")
                .select()
//                .apis(RequestHandlerSelectors.any())
                .apis(RequestHandlerSelectors.basePackage("com.dwpro"))
                .paths(PathSelectors.any())
                .build();
    }


    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("标题lws") //标题
                .description("简介lws") //简介
                .termsOfServiceUrl("服务条款lws") //服务条款
                .contact(new Contact("randy", "", "randy@gmail.com"))
                .version("1.0.lws") //版本
                .build();
    }
}

4.3 Controller类
    @RestController
    @RequestMapping("/v1")
    @Api(tags = {"测试Swagger的注解使用"})
    public class HelloworldController {


        @RequestMapping("say1")
        @ApiOperation(value = "用于打印用户输入信息", notes = "这是个什么鬼啊啊啊", httpMethod = "GET")
        public String say1(@ApiParam(value = "参数描述", example = "10086") @RequestParam("message") Integer message) {
            return "";
        }

        @PostMapping("say2")
        @ApiOperation(value = "测试请求体", notes = "这是个什么鬼啊啊啊", httpMethod = "POST")
        public String say2(@ApiParam(value = "参数描述") @RequestBody ApFissionLog apFissionLog) {
            return "";
        }

        @PostMapping("say3")
        @ApiImplicitParams({
                @ApiImplicitParam(name = "cavatar",value = "value1",example = "10001", dataType = "int", paramType = "query"),
                @ApiImplicitParam(name = "cnickname",value = "value2",example = "example2", dataType = "string", paramType = "query")
        })
        public String say3(@RequestParam("cavatar") String cavatar, @RequestParam("cnickname") String cnickname) {
            return "";
        }

        @PostMapping("say4")
        public ApFissionLog say4(@RequestParam("cavatar") String cavatar, @RequestParam("cnickname") String cnickname) {
            return new ApFissionLog();
        }

        @PostMapping("say5")
        @ApiResponse(code = 200,message = "返回描述", response = ApFissionLog.class)
        public ApFissionLog say5(@RequestParam("cavatar") String cavatar, @RequestParam("cnickname") String cnickname) {
            return new ApFissionLog();
        }

        @PostMapping("say6")
        @ApiOperation(value = "测试请求体", notes = "这是个什么鬼啊啊啊", httpMethod = "POST")
        public ApFissionLog say6(@RequestBody ApFissionLog apFissionLog) {
            return new ApFissionLog();
        }


    }
4.4 POJO类
    @Data
    @ApiModel(value = "model名字", description = "描述信息")
    public class ApFissionLog {

        @ApiModelProperty(value = "C用户的昵称", notes = "notes", example = "AAA-BBB-CCC", required = true)
        private String cnickname;
        @ApiModelProperty(value = "C用户的头像", notes = "notes", example = "http://www.aaa.com/avtar.png", required = true)
        private String cavatar;

    }

原文地址:https://blog.csdn.net/randavy/article/details/134769343

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_43070.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注