swagger使用介绍

Swagger依赖信息

<!--接口文档生成工具swagger-->
<dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger2</artifactId>
   <version>2.9.2</version>
</dependency>
<!--接口文档生成工具界面swagger-ui-->
<dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger-ui</artifactId>
   <version2.9.2</version>
</dependency>
<!—以下两个依赖用于生成文档,自定义注解使用-->
<!--实现Swagger导出离线API文档-->
<dependency>
   <groupId>io.github.swagger2markup</groupId>
   <artifactId>swagger2markup</artifactId>
   <version>1.3.3</version>
   <scope>test</scope>
</dependency>
<!--Swagger 自定义map参数-->
<dependency>
   <groupId>org.javassist</groupId>
   <artifactId>javassist</artifactId>
   <version>3.21.0-GA</version>
</dependency>

一、 Swagger基本注解介绍

  1. @EnableSwagger2 :开启Swagger
@EnableSwagger2:放在启动类上或Swagger配置类上。

举例:1

@EnableSwagger2
public class SwaggerApplication {
   public static void main(String[] args) {
      SpringApplication.run(SwaggerApplication.class, args);
   }
}

举例:2

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    // 定义分隔符,配置Swagger多包
    private static final String splitor = ";";
    @Bean
    public Docket buildDocket() {
        return new Docket(DocumentationType.SWAGGER_2)
                //将api的元素设置为包含在json resource listing响应中
                .apiInfo(buildApiInfo())
                //设置ip和端口,或者域名
                //.host("127.0.0.1:8080")
                //选择那些路径和api会生成document
                .select()
                //要扫描的API(Controller)基础包(多个包用 ; 隔开)
                .apis(basePackage("com.erp.user.storage.controller"
                        + splitor + "com.erp.user.preview.controller"
                        + splitor + "com.erp.user.swaggerDemo.controller"
                        ))
                //错误路径不监控
                .paths(Predicates.not(PathSelectors.regex("/error.*")))
                //对根下所有路径进行监控
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo buildApiInfo() {
        return new ApiInfoBuilder()
                //文档标题
                .title("用户服务API")
                //文档描述
                .description("用户服务调试接口文档")
                //联系人
               // .contact(new Contact("name", "url", "email"))
                //版本号
                .version("0.0.1")
                //更新此API的许可证信息
                //.license("Apache 2.0")
                //更新此API的许可证Url
                //.licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
                //更新服务条款URL
                //.termsOfServiceUrl("NO terms of service")
                .build();
    }

    /**
     * @param basePackage
     * @description 重写basePackage方法,使能够实现多包访问,复制贴上去
     * @returen com.google.common.base.Predicate<springfox.documentation.RequestHandler>
     */
    public static Predicate<RequestHandler> basePackage(final String basePackage) {
        return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
    }

    private static Function<Class<?>, Boolean> handlerPackage(final String basePackage) {
        return input -> {
            // 循环判断匹配
            for (String strPackage : basePackage.split(splitor)) {
                boolean isMatch = input.getPackage().getName().startsWith(strPackage);
                if (isMatch) {
                    return true;
                }
            }
            return false;
        };
    }

    private static Optional<? extends Class<?>> declaringClass(RequestHandler input) {
        return Optional.fromNullable(input.declaringClass());
    }
}
  1. @Api :请求类的说明
@Api:放在请求的类上,与 @Controller 并列,说明类的作用,如用户模块,用户类等。
    tags="说明该类的作用"
value="该参数没什么意义,所以不需要配置"
description = "用户基本信息操作"

举例:

@Api(value = "用户Controller",tags = "用户信息测试")
@RestController
@RequestMapping("/user")
public class UserController {
//TODO
}
  1. @ApiOperation:方法的说明
@ApiOperation"用在请求的方法上,说明方法的作用"
    value="说明方法的作用"
notes="方法的备注说明"
tags="说明该方法的作用,参数是个数组,可以填多个"
格式:tags={"作用1","作用2"}
httpMethod="设置显示的请求方式GET、POST、PUT、DELETE"

举例:

@ApiOperation(value = "查询用户信息",notes = "方法的备注说明,如果有可以写在这里",httpMethod = "GET")
@RequestMapping(value = "/findUser")
public User findUser(@RequestParam String userId){
    //TODO
}
  1. @ApiImplicitParams、@ApiImplicitParam:方法参数的说明
@ApiImplicitParams:用在请求的方法上,包含一组参数说明
    @ApiImplicitParam:对单个参数的说明      
        name:参数名
        value:参数的汉字说明、解释
        required:参数是否必须传
        paramType:参数放在哪个地方
            · header --> 请求参数的获取:@RequestHeader
            · query --> 请求参数的获取:@RequestParam
            · path(用于restful接口)--> 请求参数的获取:@PathVariable
            · body(请求体)-->  @RequestBody User user
            · form(普通表单提交)     
        dataType:参数类型,默认String,其它值dataType="int"       
        defaultValue:参数的默认值

举例:多个参数

@ApiOperation(value = "查询用户",notes = "查询用户的所有信息",httpMethod = "POST")
@ApiImplicitParams({
        @ApiImplicitParam(name = "userId",value = "用户Id",dataType = "String",paramType = "form",required = true),
        @ApiImplicitParam(name = "userName",value = "用户名",dataType = "String",paramType = "form",required = true),
        @ApiImplicitParam(name = "password",value = "密码",dataType = "String",paramType = "form",required = true),})
@RequestMapping("/findList")
public List<User> findList(String userId, String userName, String password,Integer age){
//TODO
}

举例:单个参数

@ApiOperation(value = "查询用户信息",notes = "根据id查询用户信息",httpMethod = "GET")
@ApiImplicitParam(name = "userId",value = "用户id",paramType = "query",dataType = "String",example = "根据id查询用户",required = true)
@RequestMapping(value = "/findUser")
public User findUser(@RequestParam String userId){
    //TODO
}
  1. @ApiResponses、@ApiResponse:方法返回值的说明
@ApiResponses:方法返回对象的说明
    @ApiResponse:每个参数的说明
        code:数字,例如400
        message:信息,例如"请求参数没填好"
        response:抛出异常的类

举例:

@ApiOperation(value = "修改密码", notes = "方法的备注说明,如果有可以写在这里",httpMethod = "POST")
@ApiResponses({
        @ApiResponse(code = 400, message = "请求参数没填好"),
        @ApiResponse(code = 404, message = "请求路径找不到")
})
@RequestMapping(value = "/findUser")
public User findUser(@RequestParam String userId){
    //TODO
}
  1. @ApiModel:用于JavaBean上面,表示一个JavaBean
@ApiModel:用于JavaBean的类上面,表示此 JavaBean 整体的信息(这种一般用在post创建的时候,使用 @RequestBody 这样的场景,请求参数无法使用 @ApiImplicitParam 注解进行描述的时候 )

举例:

@ApiModel("用户信息类")
public class User {
    @ApiModelProperty(value="用户id",name="id",dataType = "Integer",example="用户id",required = true)
    private String id;
}
  1. @ApiModelProperty:用在JavaBean的属性上面,说明属性含义
@ApiModelProperty:用在属性上,描述实体类的属性
value="用户名" 描述参数的意义
name="name" 参数的变量名
example="举例说明 "
hidden="true" 隐藏
dataType="重写属性类型"
required=true 参数是否必填

举例:

@ApiModel("用户信息类")
public class User {
    @ApiModelProperty(value="用户id",name="id",dataType = "Integer",example="用户id",required = true)
    private String id;
    @ApiModelProperty(value="用户名",name="userName")
    private String username;
    @ApiModelProperty("密码")
    private String password;
  1. @ApiParam:用于方法,参数,字段说明 表示对参数的要求和说明
@ApiParam:用在属性上,描述实体类的属性
name="参数名称"
value="参数的简要说明"
defaultValue="参数默认值"
required="true" 表示属性是否必填,默认为false

举例:

public User addUser(@ApiParam(value = "新增用户参数", required = true) @RequestBody User param) {
//TODO
}
  1. @ApiIgnore:用于类或者方法上,不被显示在页面上
  2. @Profile({“dev”, “test”}):用于配置类上,表示只对开发和测试环境有用

二、 自定义注解的介绍(用来接收返回Map参数)

  1. @ApiJsonObject、@ApiJsonProperty:方法参数的说明
@ApiJsonObject:用在请求的方法上,包含一组参数说明
	name="接收Map名称"
	value={
    @ApiJsonProperty:对单个参数的说明      
        key="key参数名称"
        example="value值参数设置" 传参举例,默认是接参类型
        type="参数类型" 默认String
        description="参数描述"
	}

举例:

@RequestMapping(value = "/userLogin",method = RequestMethod.POST)
@ApiOperation(value = "添加用户",notes = "添加公司用户")
@ApiJsonObject(name = "paramMap", value = {
        @ApiJsonProperty(type = Integer.class,key = "id", example = "188xxxxxxx", description = "user phone"),
        @ApiJsonProperty(type = String.class,key = "password", example = "123456", description = "user password"),
        @ApiJsonProperty(type = String.class,key = "username", example = "", description = "user name"),
})
public SysResult userLogin(@RequestBody Map<String, Object> paramMap){
    //TODO
}
  1. @ApiReturnJson、@ApiReturnJsonPro:方法参数的说明(弃用)
@ApiReturnJson:用在请求的方法上,返回Map的说明(2.9.2版本默认正常显示)
	name="返回Map名称"
	value={
    @ApiReturnJsonPro:对单个参数的说明      
        key="key参数名称"
description="参数描述"
        type="参数类型" 默认String
	}

举例:

@RequestMapping(value = "/userMap",method = RequestMethod.POST)
@ApiReturnJson(name = "returnMap", value = {
        @ApiReturnJsonPro(key = "re1", description = "name",dataType = User.class),
        @ApiReturnJsonPro(key = "re2", description = "password")
})
public Map test2(@RequestBody Map<String,Object> params){
    //TODO
}

三、 Swagger的简单使用

  1. API文档浏览地址
    配置好Swagger2并适当添加注解后,启动SpringBoot应用,访问http://localhost:8080/swagger-ui.html 即可浏览API文档。另外,我们需要为了API文档的可读性,适当的使用以上几种注解就可以。
    Swagger主页
    在这里插入图片描述

Controller信息
在这里插入图片描述
调试步骤
在这里插入图片描述
四、 Swagger2 文档生成
运行服务打开Swagger复制Swagger文档地址,修改测试类生成文档
在这里插入图片描述
完成文档生成:可复制出来进行修改(用完注意删除生成的docs包)
在这里插入图片描述

代码(隐藏)

@SpringBootTest
@RunWith(SpringRunner.class)
public class SwaggerTest {
    //swagger文档地址
    private final String Swagger2DocUrl = "http://127.0.0.1:8030/v2/api-docs";
    /**
     * 生成AsciiDocs格式文档
     * @throws Exception
     */
    @Test
    public void generateAsciiDocs() throws Exception {
        //    输出Ascii格式
        Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
                .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
                .withOutputLanguage(Language.ZH)
                .withPathsGroupedBy(GroupBy.TAGS)
                .withGeneratedExamples()
                .withoutInlineSchema()
                .build();

        Swagger2MarkupConverter.from(new URL(Swagger2DocUrl))
                .withConfig(config)
                .build()
                .toFolder(Paths.get("./docs/asciidoc/generated"));
    }

    /**
     * 生成Markdown格式文档
     * @throws Exception
     */
    @Test
    public void generateMarkdownDocs() throws Exception {
        //    输出Markdown格式
        Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
                .withMarkupLanguage(MarkupLanguage.MARKDOWN)
                .withOutputLanguage(Language.ZH)
                .withPathsGroupedBy(GroupBy.TAGS)
                .withGeneratedExamples()
                .withoutInlineSchema()
                .build();

        Swagger2MarkupConverter.from(new URL(Swagger2DocUrl))
                .withConfig(config)
                .build()
                .toFolder(Paths.get("./docs/markdown/generated"));
    }
    /**
     * 生成Confluence格式文档
     * @throws Exception
     */
    @Test
    public void generateConfluenceDocs() throws Exception {
        //    输出Confluence使用的格式
        Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
                .withMarkupLanguage(MarkupLanguage.CONFLUENCE_MARKUP)
                .withOutputLanguage(Language.ZH)
                .withPathsGroupedBy(GroupBy.TAGS)
                .withGeneratedExamples()
                .withoutInlineSchema()
                .build();

        Swagger2MarkupConverter.from(new URL(Swagger2DocUrl))
                .withConfig(config)
                .build()
                .toFolder(Paths.get("./docs/confluence/generated"));
    }

    /**
     * 生成AsciiDocs格式文档,并汇总成一个文件
     * @throws Exception
     */
    @Test
    public void generateAsciiDocsToFile() throws Exception {
        //    输出Ascii到单文件
        Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
                .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
                .withOutputLanguage(Language.ZH)
                .withPathsGroupedBy(GroupBy.TAGS)
                .withGeneratedExamples()
                .withoutInlineSchema()
                .build();

        Swagger2MarkupConverter.from(new URL(Swagger2DocUrl))
                .withConfig(config)
                .build()
                .toFile(Paths.get("./docs/asciidoc/generated/all"));
    }

    /**
     * 生成Markdown格式文档,并汇总成一个文件
     * @throws Exception
     */
    @Test
    public void generateMarkdownDocsToFile() throws Exception {
        //    输出Markdown到单文件
        Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
                .withMarkupLanguage(MarkupLanguage.MARKDOWN)
                .withOutputLanguage(Language.ZH)
                .withPathsGroupedBy(GroupBy.TAGS)
                .withGeneratedExamples()
                .withoutInlineSchema()
                .build();

        Swagger2MarkupConverter.from(new URL(Swagger2DocUrl))
                .withConfig(config)
                .build()
                .toFile(Paths.get("./docs/markdown/generated/all"));
    }

}


五、 Swagger2 API接口导入Postman使用

  1. 访问http://localhost:8030/swagger-ui.html 文档的首页,复制下面这个地址
    在这里插入图片描述

  2. 打开postman–>import–>import Form Link
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    完成导入

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Swagger是一种用于RESTful API的开源框架,它可以根据API源代码生成交互式文档。Swagger还可以用于创建API客户端,以便开发人员可以轻松地将API集成到应用程序中。此外,Swagger还具有强大的测试和调试功能,可以帮助开发人员更有效地测试和集成API。 ### 回答2: Swagger是一种用于构建、设计、文档化和使用RESTful Web服务的开源工具。它提供了一种简单易用的方式来描述和展示Web API的功能和操作,并且允许开发者更轻松地与API进行交互。 Swagger的主要功能包括API文档自动生成、API可视化展示和API的测试和调试。通过Swagger,开发者可以使用简单的注解来描述API的参数、返回类型、路径和操作等细节,然后利用Swagger的代码生成器自动生成文档和客户端SDK。 API文档是Swagger的核心功能之一。通过Swagger,开发者可以使用Swagger注解来定义API的信息和细节,然后利用Swagger UI生成具有交互性和可视化展示的API文档。这样,开发者可以在不阅读源代码的情况下,直观地了解API使用方法和功能。 除了文档生成,Swagger还提供了API的测试和调试功能。开发者可以利用Swagger UI直接在浏览器中进行API的测试,输入相关参数并查看API的响应结果。这样,开发者可以更便捷地验证API的正确性和性能,并且能够快速定位问题所在。 总结来说,Swagger是一种强大而灵活的工具,可以大幅度提升开发者在构建和使用RESTful Web服务过程中的效率和便捷性。它通过自动生成文档、提供可视化展示和支持测试调试等功能,使得API的设计、开发和使用更加简单和直观。通过使用Swagger,开发者可以更轻松地构建和管理高质量的API,从而提升开发效率和用户体验。 ### 回答3: Swagger是一个开源的项目,用于构建、文档化和自动化测试RESTful Web服务的工具。它使用简单的注解方式来描述API的元数据,并基于这些元数据生成美观、易读的API文档。 使用Swagger可以轻松地创建API文档,这样开发人员和用户就可以清楚地了解每个API的功能,并根据需要进行测试和调用。Swagger的文档可以使用JSON或YAML格式创建,并提供了交互式UI界面来展示文档,并让用户轻松地尝试API的各种功能。 Swagger除了提供文档化的功能外,还可以生成客户端代码和服务端框架的代码。通过在API代码中使用Swagger的注解,可以根据API的定义自动生成客户端代码,从而简化了开发人员的工作。同时,Swagger还提供了许多集成插件,允许开发人员将API文档和代码集成到各种开发环境中,如IDE、浏览器插件等。 Swagger具有高度的灵活性和可扩展性,支持多种编程语言和框架,如Java、JavaScript、Python等。它还支持多种API标准,如OpenAPI规范(即Swagger规范)、RAML、GraphQL等。这些特性使得Swagger成为开发RESTful Web服务的首选工具之一。 总而言之,Swagger是一个功能强大、易用、灵活的API工具,可以帮助开发人员构建、文档化和自动化测试RESTful Web服务。通过使用Swagger,开发人员可以更好地管理和使用API,并提高开发效率和代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值