swagger的引入与使用

news/2024/7/24 9:06:29 标签: swagger, swagger2, 接口, api, idea

1.首先引入依赖

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

2.swagger配置文件,写在项目包下的config文件夹

package com.supconit.study.mybatis.xmltest.config;
import com.google.common.base.Predicates;
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.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;
public class CustomSwaggerConfig {

    @Configuration
    @EnableSwagger2
    public static class SwaggerConfig {

        @Bean
        public Docket webApiConfig(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .groupName("webApi")
                    .apiInfo(webApiInfo())
                    .select()
                    .build();
        }

        private ApiInfo webApiInfo(){
            return new ApiInfoBuilder()
                    .title("电商平台")
                    .description("本文档描述了某某电商平台微服务接口定义")
                    .version("1.0")
                    .contact(new Contact("111", "http://somc.top", "xxx@163.com"))
                    .build();
        }
    }
}

3.启动swagger

可能会遇到下面的错误,这个的根本原因就是config文件没有扫描到。

有两种解决办法:

1.直接把@EnableSwagger2注解加在主启动类就可以,这样虽然能解决问题,但是这样会扫到使用的框架的接口,这种方法要慎用。

2.主启动类加上@ComponentScan("swagger配置类所在包"),以保证配置类被扫描到

最后解决问题之后就可以访问 你的配置文件的相关端口了,http://localhost:xxxx/swagger-ui.html

4.常用注解

@Api()用于类表示标识这个类是swagger的资源
@ApiOperation()用于方法表示一个http请求的操作
@ApiParam()用于方法,参数,字段说明表示对参数的添加元数据(说明或是否必填等)
@ApiModel()用于类表示对类进行说明,用于参数用实体类接收
@ApiModelProperty()用于方法,字段表示对model属性的说明或者数据操作更改
@ApiIgnore()用于类,方法,方法参数表示这个方法或者类被忽略
@ApiImplicitParam()用于方法表示单独的请求参数
@ApiImplicitParams()用于方法包含多个 @ApiImplicitParam

1、@Api:用在请求的类上,说明该类的作用
     tags="":说明该类的作用,如果tags有多个值,会生成多个list
     value="":该参数没什么意义,在UI界面上也看不到,所以不需要配置

示例:

@Api(value="用户controller",tags={"用户操作接口"})
@RestController
public class UserController { }

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

示例:

@ApiOperation(value="用户注册",notes="手机号、密码都是必输项,年龄随便填,但必须是数字")

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

示例:

@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")

})

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

示例:

@ApiOperation(value = "select1请求",notes = "多个参数,多种的查询参数类型")
@ApiResponses({
    @ApiResponse(code=400,message="请求参数没填好"),
    @ApiResponse(code=404,message="请求路径没有或页面跳转路径不对")
})


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

示例:

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;

@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 */
}

使用swagger过程中常见的问题:

访问方式是ip:port/swagger-ui.html或者ip:port/doc.html
注意修改映射或者注意访问地址的变动

 

在使用时可能会出现这样的错误,No operations defined in spec!(规范中没有定义操作!)

解决方法:这样的问题一般是注册@Api的类所在的包没有扫描到(配置中没有定义接口api):

原因1

1.swagger配置类中配置controller的包路径出错(可能性最大)

原因2

controller层的swagger注解配置有误

原因3

启动类的注解配置有问题:@ComponentScan("com.xxx.config")

    @EnableFeignClients//启动Fegin支持
    @EnableDiscoveryClient//启动DiscoveryClient支持(用于服务注册和发现,可获取到注册中心的所有服务)
    @EntityScan(basePackages = {"com.xxx"})
    @ComponentScan("com.xxx.config")
    @SpringBootApplication
    public class OrderApplication {
     
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication.class, args);
        }
    }

由此可见是因为这个注解,指定了包路径,导致项目忽略了controller包路径,从而导致api丢失
解决方法就是去掉@componentScan:

    @EnableFeignClients//启动Fegin支持
    @EnableDiscoveryClient//启动DiscoveryClient支持(用于服务注册和发现,可获取到注册中心的所有服务)
    @EntityScan(basePackages = {"com.xxx"})
    @SpringBootApplication
    public class OrderApplication {
     
        public static void main(String[] args) {
            SpringApplication.run(OrderApplication.class, args);
        }
    }


http://www.niftyadmin.cn/n/800770.html

相关文章

盲打训练【练字】

盲打训练【练字】2022.11.20 1822021.09.02 1042021.08.30 1012021.08.29 882021.08.28 842021.08.26 662021.08.25 672022.11.20 182 2021.09.02 104 2021.08.30 101 2021.08.29 88 2021.08.28 84 2021.08.26 66 中午 2021.08.25 67

LC 有效的数独

LC 有效的数独请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&a…

逻辑推理题

一、黑白帽子问题&#xff08;又名杀狗问题&#xff09; 一群人在一起做一个游戏。每人随机分了一顶白色或黑色的帽子&#xff08;黑帽子至少有1顶&#xff09;。每人都可以看到其它人的帽子颜色&#xff0c;但不能看到自己的。主持人说让大家根据别人帽子的颜色猜自己帽子的颜…

程序员常用笔记与思维导图工具

在工作中经常会使用到各种各样的工具&#xff0c;下面从两个方面整理一下&#xff1a; 1.vscode编辑器 Visual Studio Code - Code Editing. Redefinedhttps://code.visualstudio.com/ vscode不仅是一款好用的代码编辑器&#xff0c;更是一款可以支持超多插件的笔记编辑工具…

LC 旋转图像

LC 旋转图像【2.0】给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 ** 【2.0】 ** public static void rotate(int[][] ma…

C++经验(一)-- const关键字的用法

const允许我们指定一个语义约束&#xff08;不该被改变的对象&#xff09;&#xff0c;编译器会强制实施这项约束。 const的作用也是比较多的。 在class外修饰global或者namespace作用域中的常量。修饰在文件、函数、区块作用域中的被声明为static的变量。修饰classes内被声明…

关于java中的容器、集合(Array、List、Map、Set......)

collection接口通常情况下不被直接使用&#xff0c;Java中的集合类分为4大类&#xff0c;分别由4个接口来代表&#xff1a; 接口特点父类Set无序的、元素不可重复的集合CollectionList有序的、元素可以重复的集合Queue先进先出&#xff08;FIFO&#xff09;的队列Map具有映射关…

【BZOJ2530】[Poi2011]Party (xia)构造

【BZOJ2530】[Poi2011]Party Description 给定一张N&#xff08;保证N是3的倍数&#xff09;个节点M条边的图&#xff0c;并且保证该图存在一个大小至少为2N/3的团。请输出该图的任意一个大小为N/3的团。 一个团的定义为节点的一个子集&#xff0c;该子集中的点两两有直接连边。…