1. Springboot 微服務(wù) Swagger集成

http://heidloff.net/article/usage-of-swagger-2-0-in-spring-boot-applications-to-document-apis/

  1. Swagger
  2. springfox-swagger
  3. Spring-boot
頁面訪問效果

build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.0.RELEASE")
    }
}

apply plugin: 'spring-boot'

repositories {
    mavenCentral()
    mavenLocal()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")

    compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.4.0'
    compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.4.0'
    compile group: 'io.springfox', name: 'springfox-spi', version: '2.4.0'
}

Application.java 微服務(wù)程序入口

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

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;

@SpringBootApplication
@EnableSwagger2
@ComponentScan("hello")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

        @Bean
    public Docket newsApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("greetings")
                .apiInfo(apiInfo())
                .select()
                .paths(PathSelectors.regex("/greeting.*"))
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Spring Rest Sample With Swagger Title")
                .description("Spring Rest sampele with Swagger Description")
                .termsOfServiceUrl("")
                .contact(new Contact("king.wang", "wdxxl.github.io", "wdxxlanswer@gmail.com"))
                .licenseUrl("")
                .version("1.0")
                .build();
    }
}

Greetingcontroller.java

package hello;

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;

@RestController
public class Greetingcontroller {

    private static final String TEMPLATE = "Hello, %s !";
    private final AtomicLong counter = new AtomicLong();

    @ApiOperation(value = "getGreeting", nickname = "getGreeting")
    @RequestMapping(method = RequestMethod.GET, path = "/greeting", produces = "application/json")
    @ApiImplicitParams({@ApiImplicitParam(name = "name", value = "User's name", required = false,
            dataType = "string", paramType = "query", defaultValue = "Niklas")})
    @ApiResponses(value = {@ApiResponse(code = 200, message = "Success", response = Greeting.class),
            @ApiResponse(code = 401, message = "Unauthorized"),
            @ApiResponse(code = 403, message = "Forbidden"),
            @ApiResponse(code = 404, message = "Not Found"),
            @ApiResponse(code = 500, message = "Failure")})
    public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
        return new Greeting(counter.incrementAndGet(), String.format(TEMPLATE, name));
    }
}

Greeting.java

package hello;

import com.fasterxml.jackson.annotation.JsonProperty;

import io.swagger.annotations.ApiModelProperty;

public class Greeting {
    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    @JsonProperty(required = true)
    @ApiModelProperty(notes = "The name of the user", required = true)
    public String getContent() {
        return content;
    }
}

README.md 相關(guān)的訪問網(wǎng)址信息

http://localhost:8080/greeting?name=king
http://localhost:8080/greeting
http://localhost:8080/v2/api-docs?group=greetings
http://localhost:8080/swagger-ui.html
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末或杠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劈狐,老刑警劉巖芬迄,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓦糟,死亡現(xiàn)場離奇詭異趟畏,居然都是意外死亡瘟判,警方通過查閱死者的電腦和手機蕉扮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門整胃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喳钟,你說我怎么就攤上這事屁使。” “怎么了奔则?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵蛮寂,是天一觀的道長。 經(jīng)常有香客問我应狱,道長共郭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任疾呻,我火速辦了婚禮除嘹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘岸蜗。我一直安慰自己尉咕,他們只是感情好,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布璃岳。 她就那樣靜靜地躺著年缎,像睡著了一般悔捶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上单芜,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天蜕该,我揣著相機與錄音,去河邊找鬼洲鸠。 笑死堂淡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的扒腕。 我是一名探鬼主播绢淀,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘾腰!你這毒婦竟也來了皆的?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤蹋盆,失蹤者是張志新(化名)和其女友劉穎费薄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怪嫌,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡义锥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了岩灭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拌倍。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖噪径,靈堂內(nèi)的尸體忽然破棺而出柱恤,到底是詐尸還是另有隱情,我是刑警寧澤找爱,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布梗顺,位于F島的核電站,受9級特大地震影響车摄,放射性物質(zhì)發(fā)生泄漏寺谤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一吮播、第九天 我趴在偏房一處隱蔽的房頂上張望变屁。 院中可真熱鬧,春花似錦意狠、人聲如沸粟关。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闷板。三九已至澎灸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間遮晚,已是汗流浹背性昭。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鹏漆,地道東北人巩梢。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓创泄,卻偏偏與公主長得像艺玲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鞠抑,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

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