swagger1_入门

本文档详细介绍了Swagger的简单入门步骤,包括环境搭建、配置类编写、Controller设计以及测试。同时,深入解析了Swagger常用注解如@ApiImplicitParams、@ApiOperation、@Api、@ApiResponses、@ApiModel和ApiModelProperty的使用方法和属性介绍,帮助读者理解和应用Swagger进行API文档的生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 简单入门例子

1.1 环境搭建

1.1.1 引入依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.8.RELEASE</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>swagger</artifactId>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.5.0</version>
        </dependency>

        <!-- swagger-ui -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.11.2</version>
        </dependency>

    </dependencies>

1.1.2 编写yml配置文件

server:
  port: 9000

1.1.3 编写swagger 配置类

package com.wlqk.core.config;

import io.swagger.annotations.ApiOperation;
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;

/**
 * @configuration: 声明是一个配置类,容器启动的时候初始化
 * @EnableSeagger2:通过@EnableSwagger2注解来启用Swagger2。
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    //swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //为当前包路径
                .apis(RequestHandlerSelectors.basePackage("com.wlqk.core.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    //构建 api文档的详细信息函数,注意这里的注解引用的是哪个
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                //页面标题
                .title("Spring Boot 测试使用 Swagger2 构建RESTful API")
                //创建人
                .contact(new Contact("MarryFeng", "http://www.baidu.com", ""))
                //版本号
                .version("1.0")
                //描述
                .description("API 描述")
                .build();
    }

}

1.1.4 编写启动类

package com.wlqk.core;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


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

1.1.5 编写controller

package com.wlqk.core.controller;

import com.wlqk.core.utils.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
@Api(description = "用户接口")
public class DemoController {

    private static final Logger logger = LoggerFactory.getLogger(DemoController.class);


    /*
     * value:方法说明
     * notes:实现方式
     * httpMethod:接口请求方法
     * response:返回值是什么字节码类型的
     * */
    @ApiOperation(value = "根据id查询学生信息",
            notes = "查询数据库中某个的学生信息",
            httpMethod = "POST",
            response = Result.class
    )
    /*
     * 用于包装多个参数请求
     * @ApiImplicatParam:约束一个参数请求*/
    @ApiImplicitParams(
            {
                    /*
                     * name:参数的名字
                     * value:参数描述
                     * paramType:参数以什么方式让后台接收
                     * required:true是必须的,false 不是必须的
                     * dataType:数据类型*/
                    @ApiImplicitParam(name = "id", value = "学生ID",
                            paramType = "path", required = true, dataType = "Integer"),
                    @ApiImplicitParam(name = "name", value = "学生姓名",
                            paramType = "path", required = true, dataType = "String")
            }
    )
    @RequestMapping(value = "/{id}/{name}", method = RequestMethod.POST)
    public Result addUser(@PathVariable Integer id, @PathVariable String name) {
        System.out.println(id + ":" + name);
        return new Result("OK", "操作成功");
    }

}

1.1.5 编写包装类

public class Result {

    private String code;

    private String msg;
    }

1.2 测试

2. 简单解析

3. 常用注解

@ApiImplicitParams、@ApiImplicitParam:方法参数的说明

  • @ApiImplicitParams:用在请求的方法上,包含一组参数说明里面是一组ApilmplicitParam
  • @ApiImplicitParam:对单个参数的说明
属性介绍
属性名称备注
name参数名
value参数的汉字说明、解释
required参数是否必须传
paramType参数放在哪个地方
“”header --> 请求参数的获取:@RequestHeader
“”query --> 请求参数的获取:@RequestParam
“”path(用于restful接口)–> 请求参数的获取:@PathVariable
“”body(请求体)–> @RequestBody User user
“”form(不常用)
dataType参数类型,默认String,其它值dataType=“Integer”
defaultValue参数的默认值
代码示范
@ApiOperation(value="用户登录",notes="手机号、密码都是必输项,年龄随边填,但必须是数字")
@ApiImplicitParams({
@ApiImplicitParam(name="mobile",value="手机号",required=true,paramType="form"),
@ApiImplicitParam(name="password",value="密码",required=true,paramType="form"),
@ApiImplicitParam(name="age",value="年龄",required=true,paramType="form",dataType="Integer")
})
@PostMapping("/login")
public JsonResult login(@RequestParam String mobile, @RequestParam String password,
@RequestParam Integer age){

    return JsonResult.ok(map);

@ApiOperation

  • @ApiOperation:“用在请求的方法上,说明方法的作用”
属性介绍
属性名称备注
value“说明方法的作用”
notes“方法的操作说明”
tags对当前接口进行分组
response设置返回类型

@Api属性配置

属性介绍
属性名称备注
valueurl的路径值
tags如果设置这个值、value的值会被覆盖
description对api资源的描述
basePath基本路径
position如果配置多个Api 想改变显示的顺序位置
produces如, “application/json, application/xml”
consumes如, “application/json, application/xml”
protocols协议类型,如: http, https, ws, wss.
authorizations高级特性认证时配置
hidden配置为true ,将在文档中隐藏
代码示范
   @Api(tags="APP登录授权")
@Controller
public class ApiLoginController {
}

@ApiResponses、@ApiResponse:方法返回值的说明

  • @ApiResponses:方法返回对象的说明
  • @ApiResponse:
属性名称备注
code数字,例如400
message信息,例如"请求参数没填好"
response抛出异常的类
代码示范
@ApiOperation("获取用户信息")
@ApiImplicitParams({
	@ApiImplicitParam(paramType = "query", name = "userId", dataType = "String", required = true, value = "用户Id")
}) 
@ApiResponses({
	@ApiResponse(code = 400, message = "请求参数没填好"),
	@ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")
}) 
@ResponseBody
@RequestMapping("/list")
public JsonResult list(@RequestParam String userId) {
	...
	return JsonResult.ok().put("page", pageUtil);
}

@ApiModel、@ApiModelProperty:用于响应类上,表示一个返回响应数据的信息

  • @ApiModel:用于响应类上,表示一个返回响应数据的信息
    (这种一般用在post创建的时候,使用@RequestBody这样的场景,
    请求参数无法使用 @ApiImplicitParam 注解进行描述的时
  • @ApiModelProperty:用在属性上,描述响应类的属性
@ApiModel(description= "返回响应数据")
public class RestMessage implements Serializable{

	@ApiModelProperty(value = "是否成功")
	private boolean success=true;
	@ApiModelProperty(value = "返回对象")
	private Object data;
	@ApiModelProperty(value = "错误编号")
	private Integer errCode;
	@ApiModelProperty(value = "错误信息")
	private String message;
		
	/* getter/setter */
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值