Springboot2.3.0集成swagger2.9.2

一、導(dǎo)入依賴

        <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>

二团甲、創(chuàng)建swagger配置

??在Application.java同級,創(chuàng)建Swagger2的配置類Swagger2:

@Configuration
@EnableSwagger2
public class Swagger2 {

    @Value("${swagger.enable}")
    private Boolean enable;

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Api接口")
                .description("Api接口的描述")
                .termsOfServiceUrl("http://www.baidu.com/")
                .version("1.0")
                .build();
    }

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.xxx.xxx.controller"))
                .paths(PathSelectors.any())
                .build()
                .enable(enable);
    }
}

@ Configuration:spring boot 加載配置黍聂。
@EnableSwagger2:啟用Swagger2躺苦。
createRestApi():創(chuàng)建Api的基本信息。RequestHandlerSelectors.basePackage是通過掃描該路徑下的所有Controller定義的API产还,并產(chǎn)生文檔內(nèi)容(除了被@ApiIgnore指定的請求)匹厘。
.enable(enable):通過配置文件控制swagger2是否啟用。在配置文件中配置swagger.enable為“true”或“false”脐区。一般正式環(huán)境會關(guān)閉swagger功能愈诚。

三、配置資源路徑

??如果繼承了WebMvcConfigurationSupport牛隅,則需要重新指定靜態(tài)資源(不配置的話會報No mapping for GET /swagger-ui.html錯誤):

@Configuration
public class CorsConfig extends WebMvcConfigurationSupport {

    private MyInterceptor myInterceptor;

    @Autowired
    public CorsConfig (MyInterceptor myInterceptor){
        this.myInterceptor = myInterceptor;
    }

    // 注冊過濾器
    @Bean
    public FilterRegistrationBean<RepeatedlyReadFilter> repeatedlyReadFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        RepeatedlyReadFilter repeatedlyReadFilter = new RepeatedlyReadFilter();
        registration.setFilter(repeatedlyReadFilter);
        registration.addUrlPatterns("/*");
        return registration;
    }


    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
    }

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations(
                "classpath:/static/");
        registry.addResourceHandler("swagger-ui.html").addResourceLocations(
                "classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations(
                "classpath:/META-INF/resources/webjars/");
        super.addResourceHandlers(registry);
    }
}

四炕柔、添加接口文檔內(nèi)容

import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONObject;
import com.xyf.scriptkill.util.RestMessage;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;

@Api(tags="測試控制器")
@RestController
public class TestController {

    @ApiOperation(value="測試get", notes="")
    @ApiImplicitParams({
            @ApiImplicitParam(name="name",value="姓名",required=true,paramType="query"),
            @ApiImplicitParam(name="address",value="地址",required=true,paramType="query"),
    })
    @GetMapping("/api/gettest")
    public RestMessage getTest(
            @RequestParam(value = "name", required = true) String name,
            @RequestParam(value = "address", required = true) String address
    ){
        RestMessage restMessage = new RestMessage();
        restMessage.setSuccess(true);
        restMessage.setMessage("返回成功!");
        restMessage.setData(null);
        restMessage.setCode(HttpStatus.HTTP_OK);
        return restMessage;
    }

    @ApiOperation(value="測試post")
    @ApiResponses({
            @ApiResponse(code=400,message="請求參數(shù)沒填好"),
            @ApiResponse(code=404,message="請求路徑?jīng)]有或頁面跳轉(zhuǎn)路徑不對")
    })
    @ApiImplicitParams({
            @ApiImplicitParam(name="jsonParams",value="json",paramType="body")
    })
    @PostMapping("/api/posttest")
    public RestMessage postTest(
            @RequestBody JSONObject jsonParams
    ){
        RestMessage restMessage = new RestMessage();
        restMessage.setCode(HttpStatus.HTTP_OK);
        restMessage.setData(jsonParams);
        restMessage.setMessage("返回成功媒佣!");
        restMessage.setSuccess(true);
        return restMessage;
    }
}
  • @Api:"用在Conntroller類上匕累,表示對類的說明:

    1. tags= 說明該類的作用,可以在UI界面上看到配置的內(nèi)容默伍。
    2. value= 在UI界面上看不到到欢嘿,可不配置。
  • @ApiOperation:用在Conntroller類的方法上也糊,說明方法的用途炼蹦、作用:

    1. value= 說明方法的用途、作用显设。
    2. notes= 方法的備注說明框弛。
  • @ApiImplicitParams: 用在Conntroller類的方法上,表示一組參數(shù)說明:

    • @ApiImplicitParam: 用在@ApiImplicitParams注解中捕捂,指定一個請求參數(shù)的各個方面
      1. name: 參數(shù)名稱瑟枫。
      2. value: 參數(shù)的漢字說明斗搞、解釋。
      3. required: 參數(shù)是否必須項慷妙。
      4. paramType: 參數(shù)放在哪個地方僻焚。
        • header:參數(shù)在request header獲取,@RequestHeader膝擂。
        • query:請求參數(shù)的獲取虑啤,@RequestParam。
        • path:以地址的形式提交架馋,@PathVariable狞山。
        • body:請求參數(shù)的獲取,@RequestBody叉寂,僅支持Post萍启。
        • form:以form表單的形式提交 僅支持Post。
      5. dataType:參數(shù)類型屏鳍,默認(rèn)String勘纯,其它值如dataType="Integer"。
      6. defaultValue:參數(shù)的默認(rèn)值钓瞭。
  • @ ApiResponses: 用在Conntroller類的方法上驳遵,表示一組響應(yīng):

    • @ ApiResponse: 用在@ApiResponses中,一般用于表達(dá)一個錯誤的響應(yīng)信息
      1. code: 數(shù)字山涡,例如400堤结。
      2. message: 信息內(nèi)容。
      3. response: 拋出異常的類佳鳖。
        @ ApiResponses
  • @ ApiModel: 用于響應(yīng)類上霍殴,表示一個返回響應(yīng)數(shù)據(jù)的信息:

    • @ ApiModelProperty: 用在屬性上,描述響應(yīng)類的屬性系吩。
import cn.hutool.json.JSONObject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;

@ApiModel(description= "返回響應(yīng)數(shù)據(jù)")
public class RestMessage implements Serializable {

    @ApiModelProperty(value = "是否成功")
    private boolean success;

    @ApiModelProperty(value = "返回對象")
    private JSONObject data;

    @ApiModelProperty(value = "狀態(tài)碼")
    private Integer code;

    @ApiModelProperty(value = "返回信息")
    private String message;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public JSONObject getData() {
        return data;
    }

    public void setData(JSONObject data) {
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

ok,啟動Spring boot妒蔚,輸入http://localhost:8081/swagger-ui.html

swagger

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末穿挨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肴盏,更是在濱河造成了極大的恐慌科盛,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菜皂,死亡現(xiàn)場離奇詭異贞绵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)恍飘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門榨崩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谴垫,“玉大人,你說我怎么就攤上這事母蛛◆婕簦” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵彩郊,是天一觀的道長前弯。 經(jīng)常有香客問我,道長秫逝,這世上最難降的妖魔是什么恕出? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮违帆,結(jié)果婚禮上剃根,老公的妹妹穿的比我還像新娘。我一直安慰自己前方,他們只是感情好狈醉,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惠险,像睡著了一般苗傅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上班巩,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天渣慕,我揣著相機(jī)與錄音,去河邊找鬼抱慌。 笑死逊桦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抑进。 我是一名探鬼主播强经,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寺渗!你這毒婦竟也來了匿情?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤信殊,失蹤者是張志新(化名)和其女友劉穎炬称,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涡拘,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡玲躯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跷车。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡棘利,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姓赤,到底是詐尸還是另有隱情赡译,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布不铆,位于F島的核電站蝌焚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏誓斥。R本人自食惡果不足惜只洒,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劳坑。 院中可真熱鬧毕谴,春花似錦、人聲如沸距芬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽框仔。三九已至舀武,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間离斩,已是汗流浹背银舱。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留跛梗,地道東北人寻馏。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像核偿,于是被迫代替她去往敵國和親诚欠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容