1. 程式人生 > >(轉)第十一篇:springboot集成swagger2,構建優雅的Restful API

(轉)第十一篇:springboot集成swagger2,構建優雅的Restful API

html 風格 lan round amt select() hash 指定 model

  聲明:本部分內容均轉自於方誌明博友的博客,因為本人很喜歡他的博客,所以一直在學習,轉載僅是記錄和分享,若也有喜歡的人的話,可以去他的博客首頁看:http://blog.csdn.net/forezp/article/details/71023536

  

  swagger,中文“拽”的意思。它是一個功能強大的api框架,它的集成非常簡單,不僅提供了在線文檔的查閱,而且還提供了在線文檔的測試。另外swagger很容易構建restful風格的api,簡單優雅帥氣,正如它的名字。

一、引入依賴

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

二、寫配置類

@Configuration
@EnableSwagger2
public class Swagger2 {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.forezp.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    
private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("springboot利用swagger構建api文檔") .description("簡單優雅的restfun風格,http://blog.csdn.net/forezp") .termsOfServiceUrl("http://blog.csdn.net/forezp") .version("1.0") .build(); } }

  通過@Configuration註解,表明它是一個配置類,@EnableSwagger2開啟swagger2。apiINfo()配置一些基本的信息。apis()指定掃描的包會生成文檔。

三、寫生成文檔的註解

  swagger通過註解表明該接口會生成文檔,包括接口名、請求方法、參數、返回信息的等等。

  (1)@Api:修飾整個類,描述Controller的作用

  (2)@ApiOperation描述一個類的一個方法,或者說一個接口

  (3)@ApiParam:單個參數描述

  (4)@ApiModel:用對象來接收參數

  (5)@ApiProperty:用對象接收參數時,描述對象的一個字段

  (6)@ApiResponse:HTTP響應其中1個描述

  (7)@ApiResponses:HTTP響應整體描述

  (8)@ApiIgnore:使用該註解忽略這個API

  (9)@ApiError :發生錯誤返回的信息

  (10)@ApiParamImplicitL:一個請求參數

  (11)@ApiParamsImplicit: 多個請求參數

  現在通過一個栗子來說明:

package com.forezp.controller;

import com.forezp.entity.Book;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;

import java.util.*;

/**
 * 用戶創建某本圖書 POST    /books/
 * 用戶修改對某本圖書    PUT /books/:id/
 * 用戶刪除對某本圖書    DELETE  /books/:id/
 * 用戶獲取所有的圖書 GET /books
 *  用戶獲取某一圖書  GET /Books/:id
 * Created by fangzhipeng on 2017/4/17.
 * 官方文檔:http://swagger.io/docs/specification/api-host-and-base-path/
 */
@RestController
@RequestMapping(value = "/books")
public class BookContrller {

    Map<Long, Book> books = Collections.synchronizedMap(new HashMap<Long, Book>());

    @ApiOperation(value="獲取圖書列表", notes="獲取圖書列表")
    @RequestMapping(value={""}, method= RequestMethod.GET)
    public List<Book> getBook() {
        List<Book> book = new ArrayList<>(books.values());
        return book;
    }

    @ApiOperation(value="創建圖書", notes="創建圖書")
    @ApiImplicitParam(name = "book", value = "圖書詳細實體", required = true, dataType = "Book")
    @RequestMapping(value="", method=RequestMethod.POST)
    public String postBook(@RequestBody Book book) {
        books.put(book.getId(), book);
        return "success";
    }
@ApiOperation(value
="獲圖書細信息", notes="根據url的id來獲取詳細信息") @ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "Long",paramType = "path") @RequestMapping(value="/{id}", method=RequestMethod.GET) public Book getBook(@PathVariable Long id) { return books.get(id); } @ApiOperation(value="更新信息", notes="根據url的id來指定更新圖書信息") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "圖書ID", required = true, dataType = "Long",paramType = "path"), @ApiImplicitParam(name = "book", value = "圖書實體book", required = true, dataType = "Book") })
@RequestMapping(value
="/{id}", method= RequestMethod.PUT) public String putUser(@PathVariable Long id, @RequestBody Book book) { Book book1 = books.get(id); book1.setName(book.getName()); book1.setPrice(book.getPrice()); books.put(id, book1); return "success"; }
@ApiOperation(value
="刪除圖書", notes="根據url的id來指定刪除圖書") @ApiImplicitParam(name = "id", value = "圖書ID", required = true, dataType = "Long",paramType = "path") @RequestMapping(value="/{id}", method=RequestMethod.DELETE) public String deleteUser(@PathVariable Long id) { books.remove(id); return "success"; } @ApiIgnore//使用該註解忽略這個API @RequestMapping(value = "/hi", method = RequestMethod.GET) public String jsonTest() { return " hi you!"; } }

  通過相關註解,就可以讓swagger2生成相應的文檔。如果你不需要某接口生成文檔,只需要在加@ApiIgnore註解即可。

  需要說明的是,如果請求參數在url上,@ApiImplicitParam 上加paramType = “path” 。

啟動工程,訪問:http://localhost:8080/swagger-ui.html ,就看到swagger-ui:

技術分享圖片

四、參考資料

swagger.io

Spring Boot中使用Swagger2構建強大的RESTful API文檔

(轉)第十一篇:springboot集成swagger2,構建優雅的Restful API