简介

Swagger可以根据后端接口自动生成接口文档并进行测试

一、导入Swagger依赖

<dependencies>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    <!-- API获取的包 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>3.0.0</version>
    </dependency>
    <!-- 官方UI包 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>3.0.0</version>
    </dependency>
    <!-- 测试数据以JSON格式返回的依赖包 -->
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.13</version>
    </dependency>
</dependencies>

二、配置并开启Swagger功能

创建swagger的配置类,配置swagger的基本信息,并在配置类头上加上当前类是配置类的注解和开启生成接口文档功能的注解

@Configuration    //表明当前类是配置类
@EnableOpenApi    //表示开启生成接口文档功能(只有开启了OpenApi,才可以实现生成接口文档的功能)
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                .apis( RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("美容管理项目接口文档")//标题
                .description("更多请咨询服务开发者c。")//描述
                //附加信息
                .contact(new Contact("C", "http://www.meirong.com", "meirong@email.com"))
                .version("1.0")//版本
                .build();
    }
}

三、Swagger注解配置

注解说明

注解说明参考地址:SpringBoot整合Swagger3生成接口文档 - 知乎

@Api:用在请求的类上,表示对类的说明
    tags="说明该类的作用,可以在UI界面上看到的注解"
    value="也是说明该类的作用,可用用tags代替"

@ApiOperation:用在请求的方法上,说明方法的用途、作用
    value="说明方法的用途、作用"
    notes="方法的备注说明"

@ApiImplicitParams:用在请求的方法上,表示一组参数说明
    @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
        name:参数名
        value:参数的汉字说明、解释
        required:参数是否必须传
        paramType:参数放在哪个地方
            · header --> 请求参数的获取:@RequestHeader
            · query --> 请求参数的获取:@RequestParam
            · path(用于restful接口)--> 请求参数的获取:@PathVariable
            · div(不常用)
            · form(不常用)    
        dataType:参数类型,默认String,其它值dataType="Integer"       
        defaultValue:参数的默认值

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

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

当响应类上有需要忽略的参数时,可以使用@JsonIgnore

@Jsonlgnore作用:在json序列化时将实体类中的一些属性忽略掉,标记在属性或者方法上,返回的json数据即不包含该属性。

Controller注解配置

@Api("美容管理的接口文档")
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @ApiOperation("登录")
    @PostMapping("/login")
    public Result login(@RequestBody LoginReq user){
        if(ObjectUtils.isEmpty(user.getUsername()) || ObjectUtils.isEmpty(user.getPassword())){
            return Result.error("用户名或密码错误");
        }
        User user1 = userService.getUserByUserName(user.getUsername());
        if(user1 != null){
            if(user1.getPassword().equals(user.getPassword())){
                return Result.ok("200", "登录成功", user1);
            }else{
                return Result.error("用户名或密码错误");
            }
        }else{
            return Result.error("用户不存在");
        }
    }
}

响应类注解配置

@ApiModel
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
public class LoginReq {

    @ApiModelProperty("用户名")
    private String username;
    @ApiModelProperty("密码")
    private String password;

}

四、查看接口文档

查看地址:http://localhost:8001/swagger-ui/index.html

这里的端口号是需要生成接口文档项目的端口号

下面是生成的接口文档

 下面是注解配置的说明

五、在接口文档上测试接口

点击展开某个接口后,会显示当前接口的信息

 开始测试

 测试结果

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐