首页 > 编程语言 >[JAVA]SpringBoot集成Swagger

[JAVA]SpringBoot集成Swagger

时间:2024-12-04 13:59:52浏览次数:9  
标签:Swagger JAVA SpringBoot new return swagger Docket public

Swagger简介

  • 号称世界上最流行的Api框架;
  • RestFul Api文档在线自动生成工具=>Api文档与Api定义同步更新
  • 直接运行,可以在线测试API接口;
  • 支持多种语言:(Java,Php…) 

 官网:https://swagger.io/

在项目使用Swagger需要springbox;

  • swagger2
  • ui

 SpringBoot集成Swagger

新建一个SpringBoot—web项目

导入相关依赖

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

 编写一个Hello工程

配置Swagger==> Config

@Configuration
@EnableSwagger2     //开启Swagger2
public class SwaggerConfig {
    
}

测试运行:http://localhost:8080/swagger-ui.html

 配置Swagger

Swagger的bean实例 Docket;

@Configuration
@EnableSwagger2     //开启Swagger2
public class SwaggerConfig {

    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    }

    //配置Swagger信息=apiInfo
    private ApiInfo apiInfo(){
        Contact contact = new Contact("灰灰", "https://www.kuangstudy.com/", "@qq.com");

        return new ApiInfo("灰灰的SwaggerAPI文档",
                "好好学习,天天向上",
                "1.0",
                "http://localhost:8081/hello",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList());
    }
}

Swagger配置扫描接口

Docket.select()

//配置了Swagger的Docket的bean实例
@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()
            //RequestHandlerSelectors,配置扫描接口的方式
            //basePackage:指定要扫描的包
            //any():扫描全部
            //none():不扫描
            //withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
            //withMethodAnnotation:扫描方法上的注解
            .apis(RequestHandlerSelectors.basePackage("com.hui.swagger.controller"))
            //paths():过滤什么路径
            .paths(PathSelectors.ant("/hui/**"))
            .build();
}

配置是否启动Swagger

	//配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(false) //enable是否启动Swagger,如果未False,则Swagger不能在浏览器中访问
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.hui.swagger.controller"))
                //.paths(PathSelectors.ant("/hui/**"))
                .build();
    }

我只希望我的Swagger在生产环境中使用,在发布的时候不使用?

  • 判断是否是生产环境 flag = false
  • 注入enable(falg)

	//配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(Environment environment){
        //设置要显示的Swagger环境
        Profiles profiles = Profiles.of("dev");//可以填多个值 用逗号分割或者是|分割
        //通过environment.acceptsProfiles判断是否处在自己设定的环境当中
        boolean flag = environment.acceptsProfiles(profiles);
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(flag) //enable是否启动Swagger,如果未False,则Swagger不能在浏览器中访问
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.hui.swagger.controller"))
                //.paths(PathSelectors.ant("/hui/**"))
                .build();
    }

配置Api文档的分组

.groupName("灰灰")

如何配置多个分组,多个Docket实例即可

 	@Bean
    public Docket docket1(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("A");
    }
    @Bean
    public Docket docket2(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("B");
    }
    @Bean
    public Docket docket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("C");
    }

实体类配置

package com.hui.swagger.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
//@Api("注释")
@ApiModel("用户实体类")
public class User {
    @ApiModelProperty("用户名")
    public String username;
    @ApiModelProperty("密码")
    public String password;
}

controller

package com.hui.swagger.controller;
import com.hui.swagger.pojo.User;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
    @GetMapping(value = "/hello")
    public String hello(){
        return "hello";
    }
    //只要我们接口中,返回值中存在实体类,他就会被扫描到Swagger中
    @PostMapping(value = "/user")
    public User user(){
        return new User();
    }
    //Operation接口,不是放在类上的,是放在方法上的
    @ApiOperation("hello控制类")
    @GetMapping(value = "/hello2")
    public String hello2(@ApiParam("用户名")String username){
        return "hello"+username;
    }
    @ApiOperation("Post测试类")
    @GetMapping(value = "/postt")
    public User postt(@ApiParam("用户类")User user){
        int i = 5/0;	//500错误
        return user;
    }
}
  1. 我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
  2. 接口文档实时更新
  3. 可以在线测试

标签:Swagger,JAVA,SpringBoot,new,return,swagger,Docket,public
From: https://blog.csdn.net/weixin_66834439/article/details/144238284

相关文章

  • [JAVA]SpringCloud集成Swagger
    一.什么是Swagger官网:https://swagger.io/swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RestFul风格的web服务,总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger是一......
  • Java的4种访问修饰符的访问范围
    文章目录一、4种访问修饰符的访问范围1.同类2.同包3.不同包中的子类(1)同一个包下的子类和父类,子类继承父类访问修饰符的访问范围(不能访问pricvate)(2)不同包下的子类和父类,测试子类继承父类访问修饰符的访问范围(不能访问pricvate和默认)4.不同包大家已经知道,当用一个......
  • 基于SpringBoot+Vue的宠物咖啡馆系统-无偿分享 (附源码+LW+调试)
    目录1.项目技术2.功能菜单3.部分功能截图4.研究背景5.研究目的6.可行性分析6.1技术可行性6.2经济可行性6.3操作可行性7.系统设计7.1概述7.2系统流程和逻辑7.3系统结构8.数据库设计8.1数据库ER图(1)宠物订单实体属性图(2)健康状况实体属性图(3)菜品......
  • springboot的交通管理系统的设计与实现源码毕设+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和交通流量的激增,交通管理成为现代城市管理中的一大挑战。传统的交通管理方式已难以应对日益复杂的交通状况,如交通拥堵、违章频......
  • 洛谷P2670扫雷游戏(Java)
    三.P2670[NOIP2015普及组]扫雷游戏题目背景NOIP2015普及组T2题目描述扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有......
  • javabean重写equals和hashcode方法的作用
    Javabean重写equals()方法主要是为了实现自定义的对象比较。这个方法在Java集合框架和双列集合中扮演了关键角色;HashMap和HashSet底层原理是哈希表结构,依赖hashcode方法和equals方法保证键的唯一没有重写equals和hashcode方法:实体类比较的是地址值,map集合是根据地址值判断......
  • 【JavaScript】下拉框的实现
    什么是下拉框鼠标放到黑色盒子上才会显示下拉框中的内容,红色盒子是显示文本内容。蓝色盒子对外隐藏,鼠标放上去会将黑色盒子高度扩大。JavaScript获取元素的高度使用querySelector或者querySelectorAll获取元素,使用循环进行重复元素的选择,对元素的height属性进行修改。......
  • 网络编程(JavaEE)
    前言:    熟悉了网络的基本概念之后,接下来就需要针对网络进行一系列的编程,其中可能涉及到新的一些编程操作,需要我们进一步探索!网络编程套接字:    套接字其实是socket的翻译。    操作系统给应用程序(传输层给应用层)提供的API,起了个名字就叫socket......
  • HTML5期末考核大作业,个人网站—— 程序员个人简历模板下载HTML+CSS+JavaScript (2)
    ......
  • 校园失物招领借助 SpringBoot:塑造校园互助寻物新风尚
    3系统分析3.1可行性分析开发者在进行开发系统之前,都需要进行可行性分析,保证该系统能够被成功开发出来。3.1.1技术可行性开发该校园失物招领系统所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识,同时也接触了很多编程......