精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot集成Swagger3,還想來份離線文檔?真酷炫

開發 架構
隨著項目架構的演化,前后端分離是不可阻擋的趨勢。這種模式的協作在實踐的過程中經常會遇到的一個問題就是文檔。

 [[397948]]

本文轉載自微信公眾號「程序新視界」,作者二師兄。轉載本文請聯系程序新視界公眾號。

前言

隨著項目架構的演化,前后端分離是不可阻擋的趨勢。這種模式的協作在實踐的過程中經常會遇到的一個問題就是文檔。

在《一位CTO告訴我,項目中至少需要這3類文檔》一文我們已經描述了文檔的重要性,而接口文檔便是其中之一,可以說是必不可少的。

但編寫接口文檔對開發人員來說是一大難題,而且接口還在不斷的變化,還要花費精力去維護接口文檔的更新。

既然存在痛點,那么必須會出現解決此痛點的產品,這就是Swagger,目前已經更新到Swagger3版本了。如果你還停留在Swagger2,建議升級到Swagger3,整體UI風格及交互友好了不少。

本篇將圍繞Swagger3與SpringBoot的集成和離線文檔的生成來進行講解。

Swagger簡介

Swagger是一個規范和完整的框架,用于生成、描述、調用和可視化RESTful風格的Web服務。總體目標是使客戶端和文件系統作為服務器以同樣的速度來更新。文件的方法,參數和模型緊密集成到服務器端的代碼,允許API來始終保持同步。

官網:https://swagger.io

Swagger解決的痛點

傳統方式提供文檔有以下痛點:

  • 接口眾多,實現細節復雜,編寫文檔耗費費力,需要持續維護;
  • 接口文檔需要隨時進行同步;
  • 接口返回的結果不明確,得構造返回結構體等;
  • 不能直接在線測試接口,通常需要額外的工具,比如PostMan等。

當引入Swagger之后,以上痛點迎刃而解,同時還帶來以下優點:

  • 及時性 (接口變更后,前后端人員可實時看到最新版本)
  • 規范性 (接口具體統一風格,如接口地址,請求方式,參數,響應格式和錯誤信息等)
  • 一致性 (接口信息一致,不會因接口文檔版本問題出現分歧)
  • 可測性 (可直接基于接口文檔進行測試)

Swagger3的改變

Swagger3.0的改動,官方文檔總結如下幾點:

  • 刪除了對springfox-swagger2的依賴;
  • 刪除所有@EnableSwagger2...注解;
  • 添加了springfox-boot-starter依賴項;
  • 移除了guava等第三方依賴;
  • 文檔訪問地址改為http://ip:port/project/swagger-ui/index.html。

下面就來實戰使用一下吧。

SpringBoot集成Swagger3

SpringBoot集成Swagger3與SpringBoot集成其他框架的套路基本一致,通常包括:引入依賴、指定配置文件、創建配置類和使用。

引入依賴

在SpringBoot項目的pom.xml中引入Swagger3依賴:

  1. <dependency> 
  2.     <groupId>io.springfox</groupId> 
  3.     <artifactId>springfox-boot-starter</artifactId> 
  4.     <version>3.0.0</version> 
  5. </dependency> 

 

指定配置文件

通常情況下swagger只能在開發環境或測試環境下開啟,生產環境下需要進行關閉的。而swagger的開啟與關閉可在application.properties中進行配置:

  1. # 生產環境需設置為false 
  2. springfox.documentation.swagger-ui.enabled=true 

配置類

通過@EnableOpenApi注解啟動用Swagger的使用,同時在配置類中對Swagger的通用參數進行配置。

  1. @Configuration 
  2. @EnableOpenApi 
  3. public class Swagger3Config { 
  4.  
  5.     @Bean 
  6.     public Docket createRestApi() { 
  7.         //返回文檔摘要信息 
  8.         return new Docket(DocumentationType.OAS_30) 
  9.                 .apiInfo(apiInfo()) 
  10.                 .select() 
  11.                 .apis(RequestHandlerSelectors.withMethodAnnotation(Operation.class)) 
  12.                 .paths(PathSelectors.any()) 
  13.                 .build() 
  14.                 .globalRequestParameters(getGlobalRequestParameters()) 
  15.                 .globalResponses(HttpMethod.GET, getGlobalResponseMessage()) 
  16.                 .globalResponses(HttpMethod.POST, getGlobalResponseMessage()); 
  17.     } 
  18.  
  19.     /** 
  20.      * 生成接口信息,包括標題、聯系人等 
  21.      */ 
  22.     private ApiInfo apiInfo() { 
  23.         return new ApiInfoBuilder() 
  24.                 .title("Swagger3接口文檔"
  25.                 .description("如有疑問,可聯系二師兄,微信:zhuan2quan"
  26.                 .contact(new Contact("二師兄""https://www.choupangxia.com/""secbro2@gmail.com")) 
  27.                 .version("1.0"
  28.                 .build(); 
  29.     } 
  30.  
  31.     /** 
  32.      * 封裝全局通用參數 
  33.      */ 
  34.     private List<RequestParameter> getGlobalRequestParameters() { 
  35.         List<RequestParameter> parameters = new ArrayList<>(); 
  36.         parameters.add(new RequestParameterBuilder() 
  37.                 .name("uuid"
  38.                 .description("設備uuid"
  39.                 .required(true
  40.                 .in(ParameterType.QUERY) 
  41.                 .query(q -> q.model(m -> m.scalarModel(ScalarType.STRING))) 
  42.                 .required(false
  43.                 .build()); 
  44.         return parameters; 
  45.     } 
  46.  
  47.     /** 
  48.      * 封裝通用響應信息 
  49.      */ 
  50.     private List<Response> getGlobalResponseMessage() { 
  51.         List<Response> responseList = new ArrayList<>(); 
  52.         responseList.add(new ResponseBuilder().code("404").description("未找到資源").build()); 
  53.         return responseList; 
  54.     } 

通過以上配置已經完成了Spring Boot與Swagger的集成,下面展示一下如何在業務邏輯中進行使用。

業務中使用

創建兩個實體類Goods(商品類)和CommonResult(通用返回結果類)。

Goods類:

  1. @ApiModel("商品模型"
  2. public class Goods { 
  3.  
  4.     /** 
  5.      * 商品id 
  6.      */ 
  7.     @ApiModelProperty("商品ID"
  8.     Long goodsId; 
  9.  
  10.     /** 
  11.      * 商品名稱 
  12.      */ 
  13.     @ApiModelProperty("商品名稱"
  14.     private String goodsName; 
  15.  
  16.     /** 
  17.      * 商品價格 
  18.      */ 
  19.     @ApiModelProperty("商品價格"
  20.     private BigDecimal price; 
  21.  
  22.     // 省略getter/setter 

CommonResult類:

  1. @ApiModel("API通用數據"
  2. public class CommonResult<T> { 
  3.  
  4.     /** 
  5.      * 標識代碼,0表示成功,非0表示出錯 
  6.      */ 
  7.     @ApiModelProperty("標識代碼,0表示成功,非0表示出錯"
  8.     private Integer code; 
  9.  
  10.     /** 
  11.      * 描述信息,通常錯時使用 
  12.      */ 
  13.     @ApiModelProperty("錯誤描述"
  14.     private String msg; 
  15.  
  16.     /** 
  17.      * 業務數據 
  18.      */ 
  19.     @ApiModelProperty("業務數據"
  20.     private T data; 
  21.  
  22.     public CommonResult(Integer status, String msg, T data) { 
  23.         this.code = status; 
  24.         this.msg = msg; 
  25.         this.data = data; 
  26.     } 
  27.  
  28.     /** 
  29.      * 成功 
  30.      */ 
  31.     public static <T> CommonResult<T> success(T data) { 
  32.         return new CommonResult<>(0, "成功", data); 
  33.     } 
  34.  
  35.     public static <T> CommonResult<T> success(Integer code, String msg) { 
  36.         return new CommonResult<>(code, msg, null); 
  37.     } 
  38.  
  39.     /** 
  40.      * 錯誤 
  41.      */ 
  42.     public static <T> CommonResult<T> error(int code, String msg) { 
  43.         return new CommonResult<>(code, msg, null); 
  44.     } 
  45.  
  46.     // 省略getter/setter 

下面針對Controller層的接口來使用Swagger對應的API。

GoodsController類:

  1. @Api(tags = "商品信息管理接口"
  2. @RestController 
  3. @RequestMapping("/goods"
  4. public class GoodsController { 
  5.  
  6.     @Operation(summary = "單個商品詳情"
  7.     @GetMapping("/findGoodsById"
  8.     public CommonResult<Goods> findGoodsById( 
  9.             @Parameter(description = "商品ID,正整數"
  10.             @RequestParam(value = "goodsId", required = false, defaultValue = "0"Integer goodsId) { 
  11.         System.out.println("根據商品ID=" + goodsId + "查詢商品詳情"); 
  12.         Goods goods = new Goods(); 
  13.         goods.setGoodsId(1L); 
  14.         goods.setGoodsName("筆記本"); 
  15.         goods.setPrice(new BigDecimal(8888)); 
  16.         return CommonResult.success(goods); 
  17.     } 

OrderController類:

  1. @Api(tags = "訂單管理接口"
  2. @RestController 
  3. @RequestMapping("/order"
  4. public class OrderController { 
  5.  
  6.     @Operation(summary = "提交訂單"
  7.     @PostMapping("/order"
  8.     @ApiImplicitParams({ 
  9.             @ApiImplicitParam(name = "userId", value = "用戶id", dataTypeClass = Long.class, paramType = "query", example = "123"), 
  10.             @ApiImplicitParam(name = "goodsId", value = "商品id", dataTypeClass = Integer.class, paramType = "query", example = "1"
  11.     }) 
  12.     public CommonResult<String> toBuy(@ApiIgnore @RequestParam Map<String, String> params) { 
  13.         System.out.println(params); 
  14.         return CommonResult.success("success"); 
  15.     } 

展示效果

完成集成,啟動SpringBoot項目,在訪問地址:

http://127.0.0.1:8080/swagger-ui/index.html

從整體上可以看到如下效果:

具體的商品信息管理接口,可以看到請求參數、返回結果數據結構等信息,點擊“Try it out”,可輸入參數請求參數,進行接口的調用:

調用之后會返回對應的處理結果:

在最下面的Schemas中還可以看到對應返回結果數據和被Swagger注解的實體類信息。

Swagger3注解使用說明

經過上述實例之后,我們知道大多數API是如何使用的了,這了再匯總一下相關API的功能:

  1. @Api:用在請求的類上,表示對類的說明 
  2.     tags="說明該類的作用,可以在UI界面上看到的注解" 
  3.     value="該參數沒什么意義,在UI界面上也看到,所以不需要配置" 
  4.  
  5. @ApiOperation:用在請求的方法上,說明方法的用途、作用 
  6.     value="說明方法的用途、作用" 
  7.     notes="方法的備注說明" 
  8.  
  9. @ApiImplicitParams:用在請求的方法上,表示一組參數說明 
  10.     @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一個請求參數的各個方面 
  11.         name:參數名 
  12.         value:參數的漢字說明、解釋 
  13.         required:參數是否必須傳 
  14.         paramType:參數放在哪個地方 
  15.             · header --> 請求參數的獲取:@RequestHeader 
  16.             · query --> 請求參數的獲取:@RequestParam 
  17.             · path(用于restful接口)--> 請求參數的獲取:@PathVariable 
  18.             · body(不常用) 
  19.             · form(不常用)     
  20.         dataType:參數類型,默認String,其它值dataType="Integer"        
  21.         defaultValue:參數的默認值 
  22.  
  23. @ApiResponses:用在請求的方法上,表示一組響應 
  24.     @ApiResponse:用在@ApiResponses中,一般用于表達一個錯誤的響應信息 
  25.         code:數字,例如400 
  26.         message:信息,例如"請求參數沒填好" 
  27.         response:拋出異常的類 
  28.  
  29. @ApiModel:用于響應類上,表示一個返回響應數據的信息 
  30.             (這種一般用在post創建的時候,使用@RequestBody這樣的場景, 
  31.             請求參數無法使用@ApiImplicitParam注解進行描述的時候) 
  32.     @ApiModelProperty:用在屬性上,描述響應類的屬性 

集成knife4j導出離線文檔

Swagger為我們提供了方便的在線文檔支持,但某些場景下我們需要把接口文檔提供給合作人員,而不是直接給一個地址。此時,我們就需要將接口文檔導出為離線文檔。

這里我們集成增強文檔knife4j來實現離線文檔的導出。

添加knife4j依賴

在pom.xml中增加knife4j的依賴:

  1. <dependency> 
  2.     <groupId>com.github.xiaoymin</groupId> 
  3.     <artifactId>knife4j-spring-boot-starter</artifactId> 
  4.     <version>3.0.2</version> 
  5. </dependency> 

 

啟動knife4j

在上面配置Swagger的Swagger3Config中添加@EnableKnife4j注解,該注解可以開啟knife4j的增強功能。

  1. @EnableKnife4j 
  2. @Configuration 
  3. @EnableOpenApi 
  4. public class Swagger3Config { 
  5.     // ... 

此時,如果依舊訪問http://localhost:8080/swagger-ui/index.html會發現顯示并沒有變化。這里我們需要訪問http://localhost:8088/doc.html。

整個項目源碼地址:https://github.com/secbr/springboot-all/tree/master/springboot-swagger3。

展示效果

此時啟動項目,訪問doc.html之后,你會發現現在文檔風格變得非常酷炫。展示幾個效果圖來看看:

其中在“離線文檔”一欄中可以看到四種形式的離線文檔下載:Markdown、HTML、Word、OpenAPI。

其中個人感覺HTML格式的文檔更具有沒敢,也更方便查看,來一張圖看看效果。

小結

文檔是項目中必須的,但隨著開源框架的發展,對技術人員來說文檔的痛點也在逐步解決。如果你還處于手寫文檔的階段,真的可以嘗試一下這類更友好的文檔展現形式。

 

責任編輯:武曉燕 來源: 程序新視界
相關推薦

2022-07-21 11:04:53

Swagger3Spring

2024-11-05 09:25:45

2022-02-16 08:21:11

JavaSwagger工具

2021-04-13 07:29:13

Swagger3接口Postman

2025-08-14 07:40:05

2021-01-18 06:19:31

SpringbooSwagger2配置

2025-08-04 02:11:00

2017-06-20 15:39:58

Koa2 應用動態Swagger文檔

2011-08-11 13:46:04

Xcode離線安裝

2024-09-10 08:15:33

Asp項目API

2023-03-06 08:53:13

2023-03-08 08:48:50

Swag工具

2017-07-20 17:05:04

JavaScriptswagger-decSwagger

2024-09-18 09:30:41

SpringBootGroovy動態編程

2023-09-21 10:44:41

Web服務Swagger前端

2023-08-09 08:37:44

2009-07-03 11:27:11

JSP編程思想

2011-07-26 17:39:53

Xcode iPhone 文檔

2020-12-07 06:05:34

apidocyapiknife4j

2021-06-09 08:30:52

CSS33D旋轉視圖3D動畫
點贊
收藏

51CTO技術棧公眾號

久久成人国产| 啪啪激情综合网| 一卡二卡欧美日韩| 韩国精品一区二区三区六区色诱| 性无码专区无码| 日韩不卡一区| 精品国产伦理网| 日韩精品视频久久| www在线视频| 91偷拍与自偷拍精品| 国产精品视频xxxx| 日本a在线观看| 国产精品成人一区二区不卡| 亚洲第一级黄色片| 亚洲一级免费观看| 美女高潮在线观看| 日韩一区有码在线| 蜜桃av噜噜一区二区三| 国产欧美一级片| 天堂av在线一区| 欧美成人国产va精品日本一级| mm131美女视频| 99精品国产一区二区三区2021| 欧美色精品在线视频| 鲁一鲁一鲁一鲁一色| 大片免费在线看视频| 国产亚洲成aⅴ人片在线观看| 亚洲自拍av在线| 国产乱码77777777| 一区二区毛片| 欧美第一淫aaasss性| 亚洲 欧美 国产 另类| 色先锋久久影院av| 亚洲成av人乱码色午夜| 爱情岛论坛亚洲自拍| 国产韩日精品| 一本色道久久综合狠狠躁的推荐 | 高清一区二区三区日本久| 91社区视频在线观看| 久久最新网址| 亚洲精品电影在线| 美女扒开腿免费视频| 国产情侣一区在线| 69久久夜色精品国产69蝌蚪网 | 精品一区二区免费视频| 国产a级全部精品| 天天爽夜夜爽夜夜爽精品| 欧美日韩免费观看一区=区三区| 日韩在线观看成人| 污污视频网站在线免费观看| av永久不卡| 国产一区二区三区直播精品电影| 国产交换配乱淫视频免费| 日韩高清成人在线| 日韩久久精品成人| 色欲av无码一区二区三区| 香蕉久久夜色精品国产更新时间| 亚洲国产精品专区久久| jizz欧美性20| 久久不见久久见国语| 亚洲视频一区二区三区| 一级肉体全黄裸片| 色135综合网| 日韩网站在线观看| 久久久久亚洲av无码专区体验| 在线中文字幕第一区| 欧美乱大交xxxxx| 久久精品视频国产| 亚洲一区日本| 国产成人综合亚洲| 一级特黄aa大片| 精品一二三四区| 99久久免费国| 日韩有码电影| 国产精品视频观看| 麻豆传媒网站在线观看| 欧美草逼视频| 欧美日韩亚洲国产一区| 久久午夜夜伦鲁鲁一区二区| 玖玖精品在线| 精品欧美久久久| 国产精品亚洲无码| 婷婷久久综合| 97视频免费观看| 中国女人一级一次看片| 国产成人免费在线视频| 精品一区二区不卡| 91亚洲精选| 亚洲专区一二三| 亚洲狼人综合干| 中文字幕一区二区三区四区久久| 亚洲美女又黄又爽在线观看| 欧美福利在线视频| 在线不卡欧美| 国产在线观看91精品一区| 六月婷婷综合网| 国产欧美精品一区二区色综合| gogogo免费高清日本写真| 91av久久| 91精品啪在线观看国产60岁| 在线观看国产三级| 天天影视天天精品| 日本午夜在线亚洲.国产| av网站免费大全| 国产日韩欧美一区二区三区乱码 | 99福利在线| 色综合网站在线| 亚洲av无码久久精品色欲| 奇米色欧美一区二区三区| 精品中文字幕视频| 中文字幕a级片| 91免费看视频| 久久久久久久久久伊人| 日韩成人动漫| 亚洲成色777777在线观看影院| 卡一卡二卡三在线观看| 国产欧美综合一区二区三区| 亚洲自拍小视频免费观看| yjizz视频网站在线播放| 亚洲第一久久影院| www.日本久久| 欧美电影免费播放| 国产激情999| 婷婷国产在线| 亚洲福利视频三区| 巨乳女教师的诱惑| 性欧美69xoxoxoxo| 国产精品综合网站| h网站视频在线观看| 欧美日韩亚洲天堂| 欧美双性人妖o0| 欧美网站在线| 亚洲综合在线小说| 女女色综合影院| 欧美日韩一级片在线观看| 公侵犯人妻一区二区三区| 中文在线不卡| 精品高清视频| 爱搞国产精品| 亚洲国产精品美女| 日本免费一二三区| 成人爽a毛片一区二区免费| 国产成人亚洲综合无码| 久久久久毛片免费观看| 欧美精品一区二区三区国产精品| 国产一区二区三区在线观看| 国产精品色呦呦| 在线免费视频一区| 日韩中文首页| 成人一区二区电影| 日本黄在线观看| 性做久久久久久免费观看欧美| 中文字幕亚洲日本| 欧美精品日本| 国产女主播一区二区三区| heyzo高清在线| 亚洲国产精品嫩草影院久久| 国产精品777777| 久久精品一区二区| 亚洲 欧美 另类人妖| 欧美超碰在线| 亚洲自拍偷拍网址| 牛牛精品在线| 国产婷婷成人久久av免费高清| www.国产com| 国产欧美综合在线观看第十页 | 国产激情一区二区三区四区| 国产青草视频在线观看| 久久视频在线观看| 国产成人精品一区| 日本在线视频站| 日韩一级成人av| 动漫精品一区一码二码三码四码| 99久久久久免费精品国产 | 精品粉嫩aⅴ一区二区三区四区| 麻豆一区二区三区精品视频| 99精品欧美一区| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 久久裸体网站| 国产超碰91| 成人国产综合| 国内精品久久久久久久久| 欧美一区二区少妇| 欧美一区二区视频在线观看| 久久久久久久久久久久久久免费看 | 免费人成在线观看网站| 欧美日韩精品免费观看视频| 久草视频免费播放| 久久精品欧美一区二区三区不卡| 亚洲精品20p| 亚洲深夜av| 美女黄色片网站| 亚洲电影男人天堂| 91深夜福利视频| 亚洲午夜天堂| 欧美大胆在线视频| 男人av在线| 精品国产乱码久久久久久久久| 69视频免费看| 亚洲成人手机在线| 韩国一级黄色录像| 2023国产精品| gogo亚洲国模私拍人体| 日韩和欧美的一区| 91免费黄视频| 婷婷成人基地| 亚洲精品一卡二卡三卡四卡| 青青久久av| 不卡一卡2卡3卡4卡精品在| 欧美日韩国产网站| 18久久久久久| 都市激情久久综合| 久久亚洲精品网站| 大片免费播放在线视频| 亚洲国内精品在线| 亚洲国产精品视频在线| 欧美精品视频www在线观看| 久久久久久不卡| 午夜欧美在线一二页| 欧美丰满熟妇bbbbbb| 国产精品天美传媒| 摸摸摸bbb毛毛毛片| 99精品国产99久久久久久白柏| 一级黄色片在线免费观看| 丝袜脚交一区二区| 国产一级爱c视频| 黑丝一区二区三区| 久久观看最新视频| 国产精品99一区二区三| 相泽南亚洲一区二区在线播放| 日韩系列在线| 精品无人区一区二区三区 | 亚洲永久一区二区三区在线| 少妇精品久久久一区二区三区| 国产伦理一区二区三区| 日本在线成人| 亚洲free性xxxx护士hd| 99久久999| 亚洲专区中文字幕| 日韩精品一区二区三区中文| 91在线观看免费观看| 久久天堂久久| 91精品国产99久久久久久红楼 | 日韩资源在线观看| 超碰人人人人人人| 91精品国产福利| 91福利免费视频| 欧美日韩另类一区| 一本色道久久综合熟妇| 欧美色图一区二区三区| 中文字幕日本视频| 欧美性极品少妇| 中文字幕观看在线| 欧美精品三级在线观看| 国产免费的av| 日韩美一区二区三区| 国模人体一区二区| 日韩的一区二区| 你懂的视频在线免费| 在线电影av不卡网址| av大片在线看| 久久手机免费视频| а_天堂中文在线| 欧美亚洲国产另类| 亚洲a∨精品一区二区三区导航| 国产精品精品久久久久久| 国产成人免费精品| 91九色偷拍| 欧美日韩另类图片| 日韩中文字幕一区二区| 久久久国产精品| 日韩在线观看a| 久久午夜电影| 中文字幕视频三区| 成人黄色在线视频| 天堂久久精品忘忧草| 国产精品久久久久久久午夜片| 久久久精品视频免费观看| 亚洲大片精品永久免费| 999视频在线| 欧美大黄免费观看| 精品三级久久久久久久电影聊斋| 最新亚洲国产精品| 欧美aaaaaaa| 日韩av免费网站| 国产亚洲高清一区| 久久久久久精| 亚洲精品国产首次亮相| 日本免费黄视频| 韩国欧美国产1区| 人妻丰满熟妇aⅴ无码| 中文字幕在线免费不卡| 日韩精品手机在线| 宅男噜噜噜66一区二区66| 天天干天天插天天操| 日韩在线视频播放| 欧美aa在线观看| 亚洲一区二区三区久久| 美女久久久久| 成人一级生活片| 久久国产精品区| 亚洲 小说 欧美 激情 另类| 亚洲一区在线免费观看| 国产精品高清无码| 亚洲国产精品久久久| 麻豆视频在线观看免费| 欧美综合一区第一页| 中文字幕av一区二区三区四区| 视频在线99| 亚洲综合二区| 色综合久久五月| 亚洲精品第一国产综合野| 在线亚洲欧美日韩| 亚洲色图第一页| 国产网站在线| 99视频在线免费观看| 欧美成人milf| 中文字幕第21页| www日韩大片| 日韩欧美亚洲国产| 精品日韩在线一区| 精品孕妇一区二区三区| 国产精品久久久久久久久久久久久久| 高清精品xnxxcom| av久久久久久| 激情综合色播激情啊| 高清国产在线观看| 色狠狠色噜噜噜综合网| 天天躁日日躁狠狠躁喷水| 欧美激情a在线| 91精品短视频| 欧美一二三不卡| 国产高清精品久久久久| 小泽玛利亚一区二区免费| 欧美日韩在线精品一区二区三区激情| 天堂av电影在线观看| 91av视频在线免费观看| 伦理一区二区| 国产精品999视频| 99这里都是精品| 91av在线免费视频| 亚洲美女黄色片| 欧洲一区二区三区精品| 欧洲精品在线一区| 日韩激情一二三区| 色欲AV无码精品一区二区久久| 欧美性猛交xxx| 国产在线观看高清视频| 国产精品男人爽免费视频1| 日韩a一区二区| 天天做天天干天天操| 亚洲女子a中天字幕| 国产女人爽到高潮a毛片| 免费97视频在线精品国自产拍| 精品午夜av| 日韩精品在线观看av| 99riav一区二区三区| 久久久久亚洲视频| 日韩在线免费av| 日韩高清二区| 大j8黑人w巨大888a片| 久久久亚洲精品一区二区三区| 波多野结衣一本一道| 北条麻妃99精品青青久久| 精品国产亚洲一区二区三区| 大荫蒂性生交片| 久久久亚洲欧洲日产国码αv| 中文字幕欧美人妻精品| 欧美另类老女人| 欧美人体视频| 天天干天天av| 亚洲午夜激情av| 黄色av网站在线免费观看| 成人h猎奇视频网站| 国产一区二区三区四区三区四| 中文字幕免费在线播放| 欧美性大战久久久久久久蜜臀| 国精产品一区| 久久国产精品久久| 美女视频一区在线观看| 九九九免费视频| 亚洲欧美综合另类中字| 国产精品欧美一区二区三区不卡| 可以看毛片的网址| 国产精品麻豆久久久| 日韩中文字幕影院| 国产精品欧美一区二区| 亚洲视频免费| 日本少妇高潮喷水xxxxxxx| 91精品国产综合久久香蕉的特点| 国产高潮在线| 黄色一级视频播放| 久久精品亚洲精品国产欧美kt∨ | 韩日av一区二区| 天堂网av手机版| 久久综合色影院| 欧美美女在线观看| 99riav国产精品视频| 欧美亚洲一区二区在线| 黄色激情在线播放|