SpringBoot 整合(五)Swagger2

日常我們開發(fā)完后端接口,如果是返回restful,寫API文檔是免不了的,Swagger可以幫我們解決大多數(shù)問題(自動(dòng)生成API文檔)。

他會(huì)幫我們生成一個(gè)html頁(yè)面,大概就是這個(gè)樣子。


好了,開始正文,如果你覺得有需要的話,往下看。

1. 添加依賴

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.6.1</version>
</dependency>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.6.1</version>
</dependency>

2. 修改啟動(dòng)項(xiàng)

添加注解

@EnableSwagger2   //開啟swagger文檔生成

3. 給Controller或者字段添加注釋

3.1 給Controller方法添加注釋。
    @ApiOperation(value = "條件查詢用戶")
    @GetMapping("/user")
    @JsonView(User.UserSimpleView.class)
    public List query(UserQueryCondition condition,
                      @PageableDefault(page = 2,size = 7,sort = "username,asc")Pageable pageable){

        System.out.println(ReflectionToStringBuilder.toString(condition, ToStringStyle.DEFAULT_STYLE));
        List<User> users = new ArrayList<>();
        users.add(new User());
        users.add(new User());
        users.add(new User());
        return users;
    }

然后訪問http://127.0.0.1:8080/swagger-ui.html

3.2 給方法中的字段添加注釋

方法一:

    @RequestMapping("/user/{id:\\d+}")
    @ApiImplicitParam(name = "id",value = "用戶id")
    public User getInfo( @PathVariable String  id){
        User user = new User();
        user.setUsername("FantJ");
        return user;
    }

方法二:

    @RequestMapping("/user/{id:\\d+}")
    public User getInfo(@ApiParam("用戶id") @PathVariable String  id){
        User user = new User();
        user.setUsername("FantJ");
        return user;
    }

方法一是再方法上面加注解,方法二是再參數(shù)位加注解。


3.3 給實(shí)體類的屬性添加注釋
    @ApiModelProperty("用戶名")
    private String username;

最后所有注解的總結(jié)

  • @Api:修飾整個(gè)類,描述Controller的作用
  • @ApiOperation:描述一個(gè)類的一個(gè)方法,或者說(shuō)一個(gè)接口
  • @ApiParam:?jiǎn)蝹€(gè)參數(shù)描述
  • @ApiModel:用對(duì)象來(lái)接收參數(shù)
  • @ApiProperty:用對(duì)象接收參數(shù)時(shí),描述對(duì)象的一個(gè)字段
  • @ApiResponse:HTTP響應(yīng)其中1個(gè)描述
  • @ApiResponses:HTTP響應(yīng)整體描述
  • @ApiIgnore:使用該注解忽略這個(gè)API
  • @ApiError :發(fā)生錯(cuò)誤返回的信息
  • @ApiImplicitParam:一個(gè)請(qǐng)求參數(shù)
  • @ApiImplicitParams:多個(gè)請(qǐng)求參數(shù)

生產(chǎn)中遇到的問題集錦

1. url是127.0.0.1,但是服務(wù)在云主機(jī)上。

那如何來(lái)配置這個(gè)url呢?我們添加一個(gè)配置類

package com.tyut.web.config;

import io.swagger.annotations.Contact;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * Created by Fant.J.
 * 2018/4/30 17:20
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    public static final String SWAGGER_SCAN_BASE_PACKAGE = "com.tyut.web.controller";
    public static final String VERSION = "1.0.0";

    ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Swagger API")
                .description("This is to show api description")
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
                .termsOfServiceUrl("")
                .version(VERSION)
//                .contact(new Contact("","", "844072586@qq.com"))  聯(lián)系方式
                .build();
    }

    @Bean
    public Docket customImplementation(){
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))
                .build()
                .host("47.xxx.xxx.96")
                .directModelSubstitute(org.joda.time.LocalDate.class, java.sql.Date.class)
                .directModelSubstitute(org.joda.time.DateTime.class, java.util.Date.class)
                .apiInfo(apiInfo());
    }
}

2. 修改controller描述

在controller上加注解@Api(description = "公告API")

介紹下我的所有文集:

流行框架

SpringCloud
springboot
nginx
redis

底層實(shí)現(xiàn)原理:

Java NIO教程
Java reflection 反射詳解
Java并發(fā)學(xué)習(xí)筆錄
Java Servlet教程
jdbc組件詳解
Java NIO教程
Java語(yǔ)言/版本 研究

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評(píng)論 19 139
  • Swashbuckle.AspNetCore Swagger 使用Asp.net core 建立API.生成漂亮的...
    JacoChan閱讀 5,304評(píng)論 0 1
  • karma 測(cè)試框架 jasmine 單元測(cè)試mochachai karma ...
    神刀閱讀 999評(píng)論 0 1
  • 昨天面試第58次碰到面試的男士加我微信展開這樣的對(duì)話“美女,你叫什么名字? 美女,你們公司有點(diǎn)遠(yuǎn),以后上班也在那邊...
    樂說(shuō)閱讀 1,182評(píng)論 2 2
  • 49 2017年4月7 感恩一早的車流聲,水聲,讓我感受到世界生活 感恩列祖列宗的智慧, 感恩身邊的死黨,在我每次...
    療愈師李玉閱讀 241評(píng)論 0 3

友情鏈接更多精彩內(nèi)容