SpringBoot 集成Swagger2生成api接口文档 – 搞机Pro网 .home .main .sec-panel-head .j-newslist, .search-results .pagination, .home .load-more-wrap { display: none; } .single .entry-content img { display: block; margin-left: auto; margin-right: auto; } .single-post .entry-content iframe { width: 100%; height: 500px; } @media (max-width: 767px){ .single-post .entry-content iframe { width: 100%; height: 300px; } } LA.init({id: \”JhQPBU91LuYhvCSn\”,ck: \”JhQPBU91LuYhvCSn\”,autoTrack:true}) function isMobile() { var userAgent = navigator.userAgent.toLowerCase(); return /ipad|iphone|midp|rv:1.2.3.4|ucweb|android|windows ce|windows mobile/.test(userAgent); } .q-content .topic-tab,.q-content .q-answer .as-user,.q-content .q-answer .as-comment-name,.profile-QAPress-tab .QAPress-tab-item{color: #1471CA;} .q-content .q-topic-wrap a:hover,.q-content .q-answer .as-action a:hover,.q-content .topic-tab:hover,.q-content .topic-title:hover{color:#0D62B3;} .q-content .put-top,.q-content .topic-tab.current-tab,.q-content .q-answer .as-submit .btn-submit,.q-content .q-answer .as-comments-submit,.q-content .q-add-header .btn-post,.q-content .q-pagination .current,.q-btn-new,.profile-QAPress-tab .QAPress-tab-item.active,.q-mobile-ask a{background-color:#1471CA;} .q-content .q-answer .as-submit .btn-submit:hover,.q-content .q-answer .as-comments-submit:hover,.q-content .q-add-header .btn-post:hover,.q-content .topic-tab.current-tab:hover,.q-content .q-pagination a:hover,.q-btn-new:hover,.profile-QAPress-tab .QAPress-tab-item:hover,.q-mobile-ask a:hover{background-color:#0D62B3;} .q-content .q-answer .as-comments-input:focus,.profile-QAPress-tab .QAPress-tab-item{border-color: #1471CA;} .profile-QAPress-tab .QAPress-tab-item:hover{border-color: #0D62B3;} var _hmt = _hmt || []; _hmt.push([\’_trackPageview\’]); (function() { var hm = document.createElement(\”script\”); hm.src = \”//hm.baidu.com/hm.js?fe211990b79c55d240b27f5ba7fcb1e5\”; hm.setAttribute(\’async\’, \’true\’); document.getElementsByTagName(\’head\’)[0].appendChild(hm); })(); a, .text-primary, .btn.active, .btn:active, .btn:focus, .btn:hover, .btn.btn-primary .badge, .panel-primary>.panel-heading .badge, .member-form-tab li.active a, .member-account-menu .member-nav-icon, .member-lp-process li.active p, .wpcom-profile .user-group, .wpcom-profile .wpcom-profile-nav li.active a, .wpcom-profile .profile-tab-item.active, .user-card-name .user-group, .plyr–full-ui input[type=range], body>header.header .nav>li.active>a, body>header.header .dropdown-menu>.active>a, .entry .entry-info .nickname, .entry .entry-content .has-theme-color-color, .entry-bar-inner .user-group, .entry-action .btn-dashang, .entry-action .btn-zan, .entry-readmore-btn, .form-submit-text span, .widget_profile .user-group, .list.tabs .tab.active a, .load-more, .kx-list .kx-time{color: #102750;}.bg-primary, .btn.btn-primary, .btn.btn-primary.disabled.focus, .btn.btn-primary.disabled:focus, .btn.btn-primary.disabled:hover, .btn.btn-primary[disabled].focus, .btn.btn-primary[disabled]:focus, .btn.btn-primary[disabled]:hover, fieldset[disabled] .btn.btn-primary.focus, fieldset[disabled] .btn.btn-primary:focus, fieldset[disabled] .btn.btn-primary:hover, .nav-pills>li.active>a, .nav-pills>li.active>a:focus, .nav-pills>li.active>a:hover, .label-primary, .panel-primary>.panel-heading, .action.action-color-1 .action-item, .entry .entry-content .has-theme-color-background-color, .comment-reply-title:before, .comments-title:before, .entry-related-title:before, .widget-title:before, .search-form .submit, .sec-panel-head h1 span:before, .sec-panel-head h2 span:before, .sec-panel-head h3 span:before, .wpcom-slider .swiper-pagination .swiper-pagination-bullet-active, .tagHandler ul.tagHandlerContainer li.tagItem{background-color: #102750;}.form-control:focus, .btn.active, .btn:active, .btn.btn-primary, .btn.btn-primary.active, .btn.btn-primary:active, .btn.btn-primary.disabled.focus, .btn.btn-primary.disabled:focus, .btn.btn-primary.disabled:hover, .btn.btn-primary[disabled].focus, .btn.btn-primary[disabled]:focus, .btn.btn-primary[disabled]:hover, fieldset[disabled] .btn.btn-primary.focus, fieldset[disabled] .btn.btn-primary:focus, fieldset[disabled] .btn.btn-primary:hover, .nav .open>a, .nav .open>a:focus, .nav .open>a:hover, .panel-primary, .panel-primary>.panel-heading, .wpcom-profile .profile-tab-item.active, .search-form input.keyword:focus, .load-more{border-color: #102750;}.btn.active:before, .btn:active:before, .btn:focus:before, .btn:hover:before, .TCaptcha-button .TCaptcha-icon:after, .wpcom-profile .user-group, .user-card-name .user-group, .smartphoto-loader, .entry-bar-inner .user-group, .entry-action .btn-dashang, .entry-action .btn-zan, .entry-readmore-btn, .widget-kx-list .kx-item:before, .widget_profile .user-group, .kx-list .kx-time:before{border-color: #102750;}.btn.active:after, .btn:active:after, .btn:focus:after, .btn:hover:after, .page-numbers>li.active, .pagination>li.active, .swiper-pagination-bullet-active, .swiper-pagination-progress .swiper-pagination-progressbar, .hot-slider .swiper-button-next, .hot-slider .swiper-button-prev, .action .action-item-inner h2, .action .action-item-inner h3, .action .action-item-inner h4, .TCaptcha-button .TCaptcha-icon i, .TCaptcha-button .TCaptcha-icon:before, .member-account-menu .active:before, .member-lp-process li.active i, .member-lp-process li.processed .process-line, .wpcom-profile .user-group:after, .wpcom-profile .profile-tab-item.active:after, .user-card-name .user-group:after, .modules-video .modal-player, .social-login-form .sl-input-submit, .plyr–audio .plyr__control.plyr__tab-focus, .plyr–audio .plyr__control:hover, .plyr–audio .plyr__control[aria-expanded=true], .plyr–video .plyr__control.plyr__tab-focus, .plyr–video .plyr__control:hover, .plyr–video .plyr__control[aria-expanded=true], .plyr__control–overlaid, .plyr__control–overlaid:focus, .plyr__control–overlaid:hover, .plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:before, .entry-bar-inner .user-group:after, .post-loop-default .item-title a .sticky-post, .post-loop-card .item-title .sticky-post, .post-loop-image .item-title .sticky-post, .sidebar .widget_nav_menu ul li.current-menu-item a, .sidebar .widget_nav_menu ul li.current-post-parent a, .widget_profile .user-group:after, .list.tabs .tab.active a:after, .kx-list .kx-date:before{background-color: #102750;}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color: #102750;}.panel-primary>.panel-footer+.panel-collapse>.panel-body, .member-form-tab li.active{border-bottom-color: #102750;}.wpcom-profile .wpcom-profile-nav li.active a{border-bottom-color: #102750;}.entry .entry-content .h3, .entry .entry-content h3, .entry .member-account-content .woocommerce h2{border-left-color: #102750;}a:hover, .breadcrumb>li a:hover, .page-numbers .pagination-go .pgo-btn:hover, .pagination .pagination-go .pgo-btn:hover, .close:focus, .close:hover, .action .action-share-item:hover, .member-form .form-group.active .wi, .member-form .form-group.active .show-password .wi:hover, .member-form .form-group.error .show-password .wi:hover, .member-form .show-password .wi:hover, .member-form-tab a:hover, .member-account-name a:hover, .member-account-menu li:hover, .wpcom-profile .wpcom-profile-nav a:hover, .wpcom-profile .follow-item .follow-item-text .follow-item-name a:hover, .wpcom-profile-main .profile-posts-list .item-title a:hover, .wpcom-profile-main .profile-comments-list .comment-item-link a:hover, .hentry .member-account-wrap .notify-list .notify-item.status-1 .notify-item-title a:hover, .hentry .member-account-wrap .notify-list .notify-item-title a:hover, .user-card-name:hover, body>header.header .nav>li>a:hover, body>header.header .wpcom-adv-menu>.menu-item-style>.menu-item-wrap>li>a:hover, .navbar-action .login:focus, .navbar-action .login:hover, .navbar-action .profile a:hover, .navbar-search-close:hover, .navbar-search-btn:hover, .navbar-search-icon:focus, .navbar-search-icon:hover, .entry .entry-info a:focus, .entry .entry-info a:hover, .entry .entry-content .has-theme-hover-color, .entry .entry-content .wp-block-wpcom-accordion .panel-heading .panel-title a:hover, .entry .entry-content .wp-block-wpcom-accordion .panel-heading .panel-title a:hover .wi, .entry-bar .info-item a:hover, .comments-list .comment-children .comment-text-reply a:hover, .comments-list .reply a:hover, .comment-body .nickname a:hover, #cancel-comment-reply-link:hover, .post-loop-list .item a:hover, .post-loop-default .item-title a:hover, .post-loop-default .item-meta a:hover, .post-loop-card .item-title a:hover, .post-loop-image .item-title a:hover, .post-loop-image .item-meta-author .avatar:hover, .widget ol a:hover, .widget ul a:hover, .widget_kuaixun .widget-title-more:hover, .widget_profile .profile-name:hover, .sec-panel-head .more:hover, .el-boxed .sec-panel-head h1 span a:hover, .el-boxed .sec-panel-head h2 span a:hover, .el-boxed .sec-panel-head h3 span a:hover, .list.tabs .tab a:hover, .list-links a:focus, .list-links a:hover, .kx-list .kx-content h2 a:hover, .kx-meta .j-mobile-share:hover, .modules-category-posts .sec-panel-more a:hover{color: #021d4d;}.page-numbers>li:hover, .pagination>li:hover, .hot-slider .swiper-button-prev:hover, .hot-slider .swiper-container-rtl .swiper-button-next:hover, .hot-slider .swiper-button-next:hover, .hot-slider .swiper-container-rtl .swiper-button-prev:hover, .member-account-menu .active:hover:before, .wpcom-profile .wpcom-profile-setcover:hover, .wpcom-profile .profile-tab-item:hover, .social-login-form .sl-input-submit:hover, body>header.header .dropdown-menu>.active>a:focus, body>header.header .dropdown-menu>.active>a:hover, body>header.header .dropdown-menu>li>a:hover, body>header.header .wpcom-adv-menu>.menu-item-style>.menu-item-wrap .dropdown-menu li a:hover, .entry-tag a:focus, .entry-tag a:hover, .wpcom-shortcode-tags li:hover, .page-no-sidebar.member-login .btn-home:hover, .page-no-sidebar.member-register .btn-home:hover, .post-loop-default .item-category:hover, .post-loop-card .item-img .item-category:hover, .post-loop-image .item-img .item-category:hover, .widget .tagcloud a:hover, .sidebar .widget_nav_menu ul li.current-menu-item .sub-menu a:hover, .sidebar .widget_nav_menu ul li.current-post-parent .sub-menu a:hover, .sidebar .widget_nav_menu ul li a:hover, .footer-sns .sns-icon:after, .list.tabs .tab.active a:hover:after, .load-more:focus, .load-more:hover, .modules-carousel-posts .sec-panel-more .swiper-button-next:hover, .modules-carousel-posts .sec-panel-more .swiper-button-prev:hover{background-color: #021d4d;}.page-numbers .pagination-go .pgo-input:focus, .pagination .pagination-go .pgo-input:focus, .member-form .form-group.active .form-input, .wpcom-profile .wpcom-profile-setcover:hover, .wpcom-profile .profile-tab-item:hover, .entry-tag a:focus, .entry-tag a:hover, .entry-action .btn-dashang.liked, .entry-action .btn-dashang:hover, .entry-action .btn-zan.liked, .entry-action .btn-zan:hover, .entry-readmore-btn:hover, .widget .tagcloud a:hover, .widget-kx-list .kx-item:hover:before, .widget-kx-list .kx-item.active:before, .load-more:focus, .load-more:hover{border-color: #021d4d;}.action .action-item:hover, .entry .entry-content .has-theme-hover-background-color, .entry-action .btn-dashang.liked, .entry-action .btn-dashang:hover, .entry-action .btn-zan.liked, .entry-action .btn-zan:hover, .entry-readmore-btn:hover, .search-form .submit:hover, .wpcom-slider .swiper-pagination span:hover, .tagHandler ul.tagHandlerContainer li.tagItem:hover{background-color: #021d4d;}.member-form-tab li.active:hover{border-bottom-color: #021d4d;}.member-account-input input:focus, .member-account-input select:focus, .member-account-input textarea:focus, .modules-carousel-posts .sec-panel-more .swiper-button-next:hover, .modules-carousel-posts .sec-panel-more .swiper-button-prev:hover{border-color: #021d4d;}.wpcom-profile .wpcom-profile-nav a:hover{border-bottom-color: #021d4d;}@media (max-width:991px){.navbar-collapse{background-color: #102750;}}@media (max-width:767px){.entry-bar .info-item.share .mobile{background-color: #102750;}} body>header.header{background-color: #fff;;} body>header.header .logo img{max-height: 40px;} @media (max-width: 767px){ body>header.header .logo img{max-height: 36px;} } .entry .entry-video{ height: 482px;} @media (max-width: 1219px){ .entry .entry-video{ height: 386.49883449883px;} } @media (max-width: 991px){ .entry .entry-video{ height: 449.41724941725px;} } @media (max-width: 767px){ .entry .entry-video{ height: 344.28571428571px;} } @media (max-width: 500px){ .entry .entry-video{ height: 241px;} } 首页 手机 数码 电脑 科技 软件 市场营销 综合 登录 注册 投稿 搞机Pro网首页科技软件 SpringBoot 集成Swagger2生成api接口文档 命中注定 • 2022-05-21 20:31:57 • 软件 RESTful API REST全称是Representational State Transfer,中文意思是表述性状态转移。REST指的是一组架构约束条件和原则。如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。 RESTful本质是一种软件架构,也是一种软件设计风格,将网络上的事物抽象为资源,每个资源都有一个资源标识,通过http协议使用URI访问资源。 URI设计技巧: 使用_或-来让URI可读性更好 使用/来表示资源的层级关系 使用?用来过滤资源 ,或;可以用来表示同级资源的关系 RESTful架构应该遵循统一接口原则,统一接口包含了一组受限的预定义的操作,不论什么样的资源,都是通过使用相同的接口进行资源的访问。接口应该使用标准的HTTP方法如GET,PUT和POST,并遵循这些方法的语义。 GET:从服务器取出资源

RESTful API

REST全称是Representational State Transfer,中文意思是表述性状态转移。REST指的是一组架构约束条件和原则。如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。

RESTful本质是一种软件架构,也是一种软件设计风格,将网络上的事物抽象为资源,每个资源都有一个资源标识,通过http协议使用URI访问资源。

URI设计技巧:

  • 使用_或-来让URI可读性更好
  • 使用/来表示资源的层级关系
  • 使用?用来过滤资源
  • ,或;可以用来表示同级资源的关系

RESTful架构应该遵循统一接口原则,统一接口包含了一组受限的预定义的操作,不论什么样的资源,都是通过使用相同的接口进行资源的访问。接口应该使用标准的HTTP方法如GET,PUT和POST,并遵循这些方法的语义。

GET:从服务器取出资源(一项或多项)。

POST:在服务器新建一个资源。

PUT:在服务器更新资源。

PATCH:在服务器更新资源。

DELETE:从服务器删除资源

Swagger介绍

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger2也提供了强大的页面测试功能来调试每个RESTful API。它主要包含三部分:

  • Swagger Codegen: 通过Codegen 可以将描述文件生成html格式和cwiki形式的接口文档,同时也能生成多钟语言的服务端和客户端的代码。
  • Swagger UI:提供了一个可视化的UI页面展示描述文件。可以做一些的接口请求。
  • Swagger Editor: 编辑Swagger描述文件的编辑器,该编辑支持实时预览描述文件的更新效果。也提供了在线编辑器和本地部署编辑器两种方式。

SpringBoot集成Swagger2

在pom中添加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>/2添加swagger配置类

添加swagger配置类

/**
 * @Description: swagger 配置类
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {
    /**
     * 创建API
     */
    @Bean
    public Docket createRestApi() {
        // 指定扫描包路径
        return new Docket(DocumentationType.SWAGGER_2) // 指定生成的文档的类型是Swagger2
//                .pathMapping("/swagger")
                // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息),配置文档页面的基本信息内容
                .apiInfo(apiInfo())
                // 设置哪些接口暴露给Swagger展示
                .select()
                // 扫描所有有注解的api,用这种方式更灵活
                //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                // 扫描所有 .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any()).build();
    }

    /**
     * 添加摘要信息
     */
    private ApiInfo apiInfo() {
        // 用ApiInfoBuilder进行定制
        return new ApiInfoBuilder()
                // 设置标题
                .title("描述:Spring Boot中使用Swagger2构建RESTful APIs")
                // 描述
                .description("swagger 测试demo")
                //作者信息、联系方式:Contact(String name, String url, String email)
                .contact(new Contact("dgy","https://baijiahao.baidu.com/u?app_id=1711846764618900","dobester@163.com"))
                // 版本
                .version("版本号: 1.0.1")
                .build();
    }
}/3在controller中添加注解,

在controller中添加注解,

SpringBoot 集成Swagger2生成api接口文档SpringBoot 集成Swagger2生成api接口文档

注解解释:

  • @Api 修饰整个类,描述Controller的作用。
  • @ApiOperation 修饰一个类的一个方法,或者说一个接口 ,可以描述这个方法的功能和注意事项。若不使用则用函数名作为方法功能。参数:value="说明方法的用途、作用",notes="方法的备注说明"
  • @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面。name:参数名,value:参数的汉字说明、解释,required:参数是否必须传,paramType:参数放在哪个地方(header –> 请求参数的获取:@RequestHeader,query –> 请求参数的获取:@RequestParam,path(用于restful接口)–> 请求参数的获取:@PathVariable,body(不常用),form(不常用)),dataType:参数类型,默认String,其它值dataType="Integer",defaultValue:参数的默认值
  • @apiResponses:用在请求的方法上,表示一组响应
  • @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息。
  • @ApiImplicitParams 修饰方法,可以描述这个方法的参数的作用。若不使用则用参数名作为参数的作用。
  • @ApiModel 修饰实体类,可以描述这个类的功能。
  • @ApiModelProperty 修饰实体类的属性,可以描述这个属性的作用。
  • @ApiIgnore修饰参数、方法和类,可以在自动生成文档时对修饰的对象进行忽略。
  • @ApiError :发生错误返回的信息

在浏览器输入localhost:8080/项目名/swagger-ui.html,查看接口信息,如下图:

SpringBoot 集成Swagger2生成api接口文档SpringBoot 集成Swagger2生成api接口文档

点击控制器controller,展示控制器下的接口,如下图所示:

SpringBoot 集成Swagger2生成api接口文档SpringBoot 集成Swagger2生成api接口文档

点击控制器下的接口,可以查看接口详细信息,如下图:

SpringBoot 集成Swagger2生成api接口文档SpringBoot 集成Swagger2生成api接口文档

点击“Try it out”–>输入参数—>点击“Execute”,可以测试接口,如下图所示:

SpringBoot 集成Swagger2生成api接口文档SpringBoot 集成Swagger2生成api接口文档

可以看到返回信息code是200,Response body是hello,dgy。

总结:如果感觉Swagger并没有实际上那么方便,还可以集成Knife4j进行接口调试。knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,具有小巧,轻量,并且功能强悍的优点。knife4j的集成和swagger的集成类似,这里就不再赘述了。