Spring boot 之自動生成API文件swagger2

不該相遇在秋天發表於2018-05-16

 

 

目前解決API的方案一般有兩種 

1.編寫文件介面。
2.利用一些現成的api系統。
3.如我一般想搞點特色的就自己寫個api系統:http://api.zhaobaolin.vip/ ,這個還支援多使用者。

但是無論哪一種,都逃不過一個麻煩事:如果程式碼有變化,必須手動維護文件,工作很忙的時候,根本沒時間去折騰文件,忙著忙著就忘了,然後前端就經常架著把菜刀站我身後。。。

 

自從遇到swagger之後 就如大旱逢甘露 他鄉遇故知 洞房花燭夜 金榜題名時.....

 

先用maven下載jar包:

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

 

然後在Application同級建立Swagger2類:

@Configuration
@EnableSwagger2
public class Swagger2 {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.test"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("swagger2測試標題 請注意")
                .description("請記住我們親愛的度娘:https://www.baidu.com/")
                .version("1.0")
                .build();
    }
}

 

Controller控制器:

@Api(value = "TestController", description = "測試資料服務 API", tags = "TestController")
@RestController
@RequestMapping(value = "/Test")
public class Test {

    @ApiOperation(value="請求的介面示例")
    @GetMapping(value = "/a")
    public String a() throws Exception{
        Child child = new Child();
        child.setAge("11");
        child.setName("碼農");
        return child.toString();
    }

    @ApiOperation(value="輸入引數介面示例")
    @PostMapping(value = "/c")
    public String c(Child child) throws Exception
    {
        if(null == child || null == child.getName() || null == child.getAge()){
            return "缺少引數";
        }
        return child.toString();
    }

    @ApiOperation(value="輸入json介面示例")
    @PostMapping(value = "/d")
    public String d(@RequestBody @ApiParam(name = "child", value = "json fromat") Child child) throws Exception
    {
        if(null == child){
            return "引數錯誤";
        }
        return child.toString();
    }

 

實體類中required可標明是否必傳:

public class Child{
    @ApiModelProperty(name = "name", value = "姓名", required = true)
    private String name;
    @ApiModelProperty(name = "age", value = "年齡", required = false)
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Child{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

 

訪問 http://localhost:9000/swagger-ui.html#  埠換成自定義的

效果上圖:

點選try it out 直接訪問除錯

 

必填欄位如果不輸入會被攔截

 

也可以json輸入  點選右邊的Json框 格式會自動進入輸入框  然後填值即可

 

感謝閱讀

 

相關文章