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

Spring Boot參數校驗以及分組校驗的使用

開發 開發工具
做web開發有一點很煩人就是要對前端輸入參數進行校驗,基本上每個接口都要對參數進行校驗,比如一些非空校驗、格式校驗等。如果參數比較少的話還是容易處理的一但參數比較多了的話代碼中就會出現大量的if-else語句。

 [[416602]]

一 前言

做web開發有一點很煩人就是要對前端輸入參數進行校驗,基本上每個接口都要對參數進行校驗,比如一些非空校驗、格式校驗等。如果參數比較少的話還是容易處理的一但參數比較多了的話代碼中就會出現大量的if-else語句。

使用這種方式雖然簡單直接,但是也有不好的地方,一是降低了開發效率,因為我們需要校驗的參數會存在很多地方,并且不同地方會有重復校驗,其次降低了代碼可讀性,因為在業務代碼中摻雜了太多額外工作的代碼。

所以我們可以使用validator組件來代替我們進行不必要的coding操作。本文基于validator的介紹資料,也結合自己在項目中的實際使用經驗進行了總結,希望能幫到大家。

1 什么是validator

Bean Validation是Java定義的一套基于注解的數據校驗規范,目前已經從JSR 303的1.0版本升級到JSR 349的1.1版本,再到JSR 380的2.0版本(2.0完成于2017.08),已經經歷了三個版本 。需要注意的是,JSR只是一項標準,它規定了一些校驗注解的規范,但沒有實現,比如@Null、@NotNull、@Pattern等,它們位于 javax.validation.constraints這個包下。而hibernate validator是對這個規范的實現,并增加了一些其他校驗注解,如 @NotBlank、@NotEmpty、@Length等,它們位于org.hibernate.validator.constraints這個包下。

如果我們的項目使用了Spring Boot,hibernate validator框架已經集成在 spring-boot-starter-web中,所以無需再添加其他依賴。如果不是Spring Boot項目,需要添加如下依賴。

  1. <dependency> 
  2.     <groupId>org.hibernate.validator</groupId> 
  3.     <artifactId>hibernate-validator</artifactId> 
  4.     <version>6.0.8.Final</version> 
  5. </dependency> 

 

二 注解介紹

1 validator內置注解

 

 

 

 


 

 

 

注解 說明
@Null 被注釋的元素必須為null
@NotNull 被注釋的元素不能為null
@AssertTrue 被注釋的元素必須為true
@AssertFalse 被注釋的元素必須為false
@Min(value) 被注釋的元素必須是一個數字,其值必須大于等于指定的最小值
@Max(value) 被注釋的元素必須是一個數字,其值必須小于等于指定的最大值
@DecimalMin(value) 被注釋的元素必須是一個數字,其值必須大于等于指定的最小值
@DecimalMax(value) 被注釋的元素必須是一個數字,其值必須小于等于指定的最大值
@Size(max,min) 被注釋的元素的大小必須在指定的范圍內
@Digits(integer, fraction) 被注釋的元素必須是一個數字,其值必須必須在可接受的范圍內
@Past 被注釋的元素必須是一個過去的日期
@Future 被注釋的元素必須是一個將來的日期
@Pattern(value) 被注釋的元素必須符合指定的正則表達式

hibernate validator中擴展定義了如下注解:

注解 說明
@NotBlank 被注釋的元素不能為null,且長度必須大于0,只能用于注解字符串
@Email 被注釋的元素必須是電子郵箱地址
@Length(min=,max=) 被注釋的字符串的大小必須在指定的范圍內
@NotEmpty 被注釋的元素值不為null且不為空,支持字符串、集合、Map和數組類型
@Range 被注釋的元素必須在規定的范圍內

三 使用

使用起來比較簡單,都是使用注解方式使用。具體來說分為單參數校驗、對象參數校驗,單參數校驗就是controller接口按照單參數接收前端傳值,沒有封裝對象進行接收,如果有封裝對象那就是對象參數校驗。

1 單參數校驗

單參數校驗只需要在參數前添加注解即可,如下所示:

  1. public Result deleteUser(@NotNull(message = "id不能為空") Long id) { 
  2.   // do something 

但有一點需要注意,如果使用單參數校驗,controller類上必須添加@Validated注解,如下所示:

  1. @RestController 
  2. @RequestMapping("/user"
  3. @Validated // 單參數校驗需要加的注解 
  4. public class UserController { 
  5.   // do something 

2 對象參數校驗

對象參數校驗使用時,需要先在對象的校驗屬性上添加注解,然后在Controller方法的對象參數前添加@Validated 注解,如下所示:

  1. public Result addUser(@Validated UserAO userAo) { 
  2.     // do something 
  3.  
  4. public class UserAO { 
  5.   @NotBlank 
  6.   private String name
  7.  
  8.   @NotNull 
  9.   private Integer age; 
  10.    
  11.   …… 

注解分組

在對象參數校驗場景下,有一種特殊場景,同一個參數對象在不同的場景下有不同的校驗規則。比如,在創建對象時不需要傳入id字段(id字段是主鍵,由系統生成,不由用戶指定),但是在修改對象時就必須要傳入id字段。在這樣的場景下就需要對注解進行分組。

1)組件有個默認分組Default.class, 所以我們可以再創建一個分組UpdateAction.class,如下所示:

  1. public interface UpdateAction { 

2)在參數類中需要校驗的屬性上,在注解中添加groups屬性:

  1. public class UserAO { 
  2.  
  3.     @NotNull(groups = UpdateAction.class, message = "id不能為空"
  4.     private Long id; 
  5.      
  6.     @NotBlank 
  7.     private String name
  8.  
  9.     @NotNull 
  10.     private Integer age; 
  11.      
  12.     …… 

如上所示,就表示只在UpdateAction分組下校驗id字段,在默認情況下就會校驗name字段和age字段。

然后在controller的方法中,在@Validated注解里指定哪種場景即可,沒有指定就代表采用Default.class,采用其他分組就需要顯示指定。如下代碼便表示在addUser()接口中按照默認情況進行參數校驗,在updateUser()接口中按照默認情況和UpdateAction分組對參數進行共同校驗。

  1. public Result addUser(@Validated UserAO userAo) { 
  2.   // do something 
  1. public Result updateUser(@Validated({Default.class, UpdateAction.class}) UserAO userAo) { 
  2.   // do something 

對象嵌套

如果需要校驗的參數對象中還嵌套有一個對象屬性,而該嵌套的對象屬性也需要校驗,那么就需要在該對象屬性上增加@Valid注解。

  1. public class UserAO { 
  2.  
  3.     @NotNull(groups = UpdateAction.class, message = "id不能為空"
  4.     private Long id; 
  5.      
  6.     @NotBlank 
  7.     private String name
  8.  
  9.     @NotNull 
  10.     private Integer age; 
  11.      
  12.     @Valid 
  13.     private Phone phone; 
  14.      
  15.     …… 
  16.  
  17. public class Phone { 
  18.     @NotBlank 
  19.     private String operatorType; 
  20.      
  21.     @NotBlank 
  22.     private String phoneNum; 

3 錯誤消息的捕獲

參數校驗失敗后會拋出異常,我們只需要在全局異常處理類中捕獲參數校驗的失敗異常,然后將錯誤消息添加到返回值中即可。捕獲異常的方法如下所示,返回值Result是我們系統自定義的返回值類。

  1. @RestControllerAdvice(basePackages= {"com.alibaba.dc.controller","com.alibaba.dc.service"}) 
  2. public class GlobalExceptionHandler { 
  3.  
  4.   @ExceptionHandler(value = {Throwable.class}) 
  5.   Result handleException(Throwable e, HttpServletRequest request){ 
  6.     // 異常處理 
  7.         } 

需要注意的是,如果缺少參數拋出的異常是MissingServletRequestParameterException,單參數校驗失敗后拋出的異常是ConstraintViolationException,get請求的對象參數校驗失敗后拋出的異常是BindException,post請求的對象參數校驗失敗后拋出的異常是MethodArgumentNotValidException,不同異常對象的結構不同,對異常消息的提取方式也就不同。如下圖所示:

1)MissingServletRequestParameterException

  1. if(e instanceof MissingServletRequestParameterException){ 
  2.     Result result = Result.buildErrorResult(ErrorCodeEnum.PARAM_ILLEGAL); 
  3.     String msg = MessageFormat.format("缺少參數{0}", ((MissingServletRequestParameterException) e).getParameterName()); 
  4.     result.setMessage(msg); 
  5.     return result; 

2)ConstraintViolationException異常

  1. if(e instanceof ConstraintViolationException){ 
  2.   // 單個參數校驗異常 
  3.   Result result = Result.buildErrorResult(ErrorCodeEnum.PARAM_ILLEGAL); 
  4.   Set<ConstraintViolation<?>> sets = ((ConstraintViolationException) e).getConstraintViolations(); 
  5.   if(CollectionUtils.isNotEmpty(sets)){ 
  6.     StringBuilder sb = new StringBuilder(); 
  7.     sets.forEach(error -> { 
  8.                     if (error instanceof FieldError) { 
  9.                         sb.append(((FieldError)error).getField()).append(":"); 
  10.                     } 
  11.                     sb.append(error.getMessage()).append(";"); 
  12.                 }); 
  13.     String msg = sb.toString(); 
  14.     msg = StringUtils.substring(msg, 0, msg.length() -1); 
  15.     result.setMessage(msg); 
  16.   } 
  17.   return result; 

3)BindException異常

  1. if (e instanceof BindException){ 
  2.       // get請求的對象參數校驗異常 
  3.       Result result = Result.buildErrorResult(ErrorCodeEnum.PARAM_ILLEGAL); 
  4.       List<ObjectError> errors = ((BindException) e).getBindingResult().getAllErrors(); 
  5.       String msg = getValidExceptionMsg(errors); 
  6.       if (StringUtils.isNotBlank(msg)){ 
  7.         result.setMessage(msg); 
  8.       } 
  9.       return result; 
  1. private String getValidExceptionMsg(List<ObjectError> errors) { 
  2.   if(CollectionUtils.isNotEmpty(errors)){ 
  3.     StringBuilder sb = new StringBuilder(); 
  4.     errors.forEach(error -> { 
  5.                     if (error instanceof FieldError) { 
  6.                        sb.append(((FieldError)error).getField()).append(":"); 
  7.                     } 
  8.                     sb.append(error.getDefaultMessage()).append(";"); 
  9.                 }); 
  10.     String msg = sb.toString(); 
  11.     msg = StringUtils.substring(msg, 0, msg.length() -1); 
  12.     return msg; 
  13.   } 
  14.   return null

4)MethodArgumentNotValidException異常

  1. if (e instanceof MethodArgumentNotValidException){ 
  2.       // post請求的對象參數校驗異常 
  3.       Result result = Result.buildErrorResult(ErrorCodeEnum.PARAM_ILLEGAL); 
  4.       List<ObjectError> errors = ((MethodArgumentNotValidException) e).getBindingResult().getAllErrors(); 
  5.       String msg = getValidExceptionMsg(errors); 
  6.       if (StringUtils.isNotBlank(msg)){ 
  7.         result.setMessage(msg); 
  8.       } 
  9.       return result; 

【本文為51CTO專欄作者“阿里巴巴官方技術”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2021-08-12 10:32:50

Spring Boot參數校驗分組校驗

2022-11-10 07:53:54

Spring參數校驗

2025-05-27 07:07:29

2025-10-27 02:00:00

2024-08-06 11:17:58

SpringJSON數據

2021-10-22 14:50:23

Spring BootJava

2023-03-09 12:04:38

Spring文件校驗

2025-04-29 07:44:26

配置校驗機制

2023-03-16 08:23:33

2022-12-30 08:49:41

SpringBoot@Validated

2025-05-14 00:00:00

2022-04-21 09:59:53

Nest參數校驗

2023-03-28 08:07:12

2023-11-29 07:23:04

參數springboto

2024-06-19 10:04:15

ifC#代碼

2025-01-06 09:51:51

2023-09-27 08:14:56

2021-05-18 09:25:54

SpringBoot參數校驗

2020-09-27 11:35:16

Spring BootStarterJava

2022-05-03 10:43:43

SpringJava
點贊
收藏

51CTO技術棧公眾號

三级在线播放| 日韩三级视频在线播放| 91精品一区| 亚洲乱码日产精品bd| 国产一级二级三级精品| 国产精品人人人人| 久久在线电影| 亚洲精品成人久久久| 久久久国产欧美| 欧美aaaxxxx做受视频| 久久香蕉国产线看观看99| 91精品国产自产在线老师啪| 日本一区二区不卡在线| 日韩一区电影| 日韩精品小视频| 天天爽夜夜爽一区二区三区| 国产深夜视频在线观看| 中文字幕巨乱亚洲| 国产专区一区二区三区| 国产精品久久无码一三区| 亚洲免费播放| 超碰97人人做人人爱少妇| 美女脱光内衣内裤| jazzjazz国产精品麻豆| 欧美男人的天堂一二区| 国产综合免费视频| 97超碰免费在线| 亚洲欧美一区二区三区国产精品| 欧美日韩成人一区二区三区| 性生交生活影碟片| 久久精品免费看| 欧美在线视频播放| 18精品爽视频在线观看| 91麻豆国产自产在线观看亚洲| 日韩精品在线播放| yjizz视频| 91久久精品无嫩草影院| 欧美日韩精品一区视频| 免费黄色一级网站| 中文字幕21页在线看| 亚洲成人动漫一区| 97av中文字幕| av免费在线免费| 亚洲色图视频网| 在线视频91| 91大神xh98hx在线播放| 国产午夜亚洲精品午夜鲁丝片 | av日韩在线网站| 亚洲iv一区二区三区| 一区二区日韩在线观看| 日本一不卡视频| 国产成人精品视| 精品成人av一区二区在线播放| 国内综合精品午夜久久资源| 欧美精品做受xxx性少妇| 亚洲AV成人无码精电影在线| 色天天综合网| 久久国产精品久久久| 久久99久久99精品免费看小说| 欧美电影三区| 久久视频在线播放| 一区二区在线观看免费视频| 国产精品国码视频| 久久久久久久香蕉网| 久久精品视频6| 日韩视频中文| 日本欧美国产在线| 一级黄色在线观看| 美女免费视频一区| 成人深夜直播免费观看| 国产99久久九九精品无码免费| 国产一区二区三区观看| 成人黄色片视频网站| 免费观看黄一级视频| av综合在线播放| 日本一区二区三区视频免费看| 国产精品一区二区三区四区色| 日本一区二区视频在线| 一区二区三区一级片| www在线观看播放免费视频日本| 一区二区三区在线视频免费观看| 日本熟妇人妻xxxx| 亚洲黄色免费看| 欧美吞精做爰啪啪高潮| 亚洲免费在线播放视频| 男人的天堂久久| 国产一区二区三区四区福利| 永久免费看片直接| 99视频精品免费观看| 国产精品久久久久aaaa九色| 一级片免费观看视频| 高清久久久久久| 欧美精品一区二区三区四区五区| 久精品国产欧美| 国产一二三四五区| 欧美freesextv| 欧美激情国产精品| 国产又大又黄又粗| 国产综合色精品一区二区三区| 粉嫩av四季av绯色av第一区| 日本中文字幕电影在线观看 | 91麻豆精品国产自产在线观看一区| 欧美午夜精品一区二区| 中文有码一区| 欧美夫妻性生活xx| 少妇一级淫片日本| 成人爱爱电影网址| 一区高清视频| 综合日韩av| 精品久久久久香蕉网| 色综合99久久久无码国产精品| 亚洲欧美偷拍自拍| 国产91露脸中文字幕在线| 99国产在线播放| 91色.com| 国产精品无码免费专区午夜| 欧美91在线|欧美| 精品亚洲一区二区三区在线观看| 卡通动漫亚洲综合| 日韩精品一级中文字幕精品视频免费观看| 91精品免费| 亚洲精品传媒| 91黄色免费版| 美国黄色a级片| 韩国欧美一区| 91丝袜美腿美女视频网站| 男男激情在线| 欧美日韩性生活视频| 91性高潮久久久久久久| 久久国产亚洲精品| 国产成人一区二区三区| 天天摸天天碰天天爽天天弄| 亚洲男同性恋视频| 玖玖爱视频在线| 欧美色爱综合| 国产成人短视频| 天堂√在线中文官网在线| 成人免费在线播放视频| 国产精品亚洲a| 任你躁在线精品免费| 久久久久九九九九| 国产99久久九九精品无码免费| 国产精品激情偷乱一区二区∴| 国产激情在线观看视频| 亚洲欧美校园春色| 欧美性受xxxx白人性爽| 午夜性色福利视频| 亚洲午夜成aⅴ人片| 日本中文字幕精品| 国产精品av一区二区| 91亚洲精品视频| bt在线麻豆视频| 717成人午夜免费福利电影| 美女福利视频网| 久久99久久久久久久久久久| 亚洲一区二区四区| 久久亚洲资源中文字| 日日骚久久av| 国产精品无码天天爽视频| 国产精品久久久久久久久果冻传媒| 国产综合免费视频| 国内精品久久久久久99蜜桃| 日本精品免费一区二区三区| 色视频免费在线观看| 日韩欧美中文字幕在线观看| brazzers精品成人一区| 奇米影视在线99精品| 夜夜爽www精品| 国产精品亚洲综合在线观看| 欧美高清不卡在线| 特黄aaaaaaaaa真人毛片| 欧美日韩视频在线| 国产一二三四区在线| 精品一区二区三区视频| 成年人三级视频| 国产欧美自拍一区| 日韩免费视频在线观看| 欧美日韩在线看片| 日韩欧美123| 六月丁香激情综合| 国产精品女人毛片| 曰本三级日本三级日本三级| 亚洲精选成人| 亚洲福利av在线| 欧美激情精品| 欧美一级淫片aaaaaaa视频| 啊v视频在线| 日韩欧美第一区| 免费无码国产精品| 亚洲精品免费视频| 国产视频久久久久久| 日韩电影在线免费观看| 992tv快乐视频| 亚洲+变态+欧美+另类+精品| 国产专区欧美专区| а_天堂中文在线| 亚洲色图17p| 国产黄a三级三级看三级| 欧美日韩国产中文精品字幕自在自线| 国产激情av在线| gogo大胆日本视频一区| 在线观看日本一区二区| 亚洲国产精品一区| 亚洲砖区区免费| 特黄特色欧美大片| 91久久偷偷做嫩草影院| 日韩不卡在线| 国内免费精品永久在线视频| 91精品国产91久久久久游泳池 | 国内精品久久久久久久97牛牛| 日本一区二区三区四区高清视频| 视频精品一区二区三区| 国产精品va在线| 男女免费观看在线爽爽爽视频| 一本色道久久综合狠狠躁篇的优点| 亚洲黄色小说网址| 欧美日韩亚洲综合| 欧美日韩综合一区二区三区| 亚洲男人的天堂网| 黄色片在线观看免费| 不卡的av电影| 国产老头和老头xxxx×| 视频一区欧美精品| 黄色免费视频大全| 欧美日韩国产精品一区二区亚洲| 亚洲国产日韩欧美| 伊人成综合网yiren22| 国产不卡一区二区在线观看| 亚洲视频资源| 国产欧美va欧美va香蕉在| 欧美动物xxx| 午夜精品99久久免费| a级网站在线播放| 色婷婷综合久久久久| 国产在线免费观看| 亚洲欧美制服中文字幕| 色欲av永久无码精品无码蜜桃| 日韩欧美自拍偷拍| 国产日韩欧美一区二区东京热| 欧美色欧美亚洲另类二区| 无码人妻熟妇av又粗又大| 日韩欧美在线字幕| 在线观看日韩中文字幕| 日韩欧美在线网址| 亚洲 欧美 中文字幕| 欧美性猛交xxxx乱大交极品| 精品91久久久| 精品国产鲁一鲁一区二区张丽| 精品无码人妻一区二区三| 一区二区三区蜜桃| 九九热视频精品| 樱桃视频在线观看一区| 欧美日韩在线国产| 亚洲精品视频自拍| 高h视频免费观看| 一区二区在线观看视频在线观看| 久久国产精品国语对白| 一区二区成人在线| 久久午夜鲁丝片午夜精品| 亚洲国产视频直播| 成人免费区一区二区三区| 欧美日韩一区二区在线播放| 国产精品一区无码| 在线观看视频欧美| 亚洲中文字幕在线观看| 91麻豆精品91久久久久同性| 国产精品热久久| 精品国产a毛片| 亚洲av毛片成人精品| 亚洲欧美日韩图片| gogogo高清在线观看免费完整版| 色诱女教师一区二区三区| av观看在线| 91精品国产91久久久久久最新 | 亚洲va电影大全| 丁香5月婷婷久久| 免费99视频| 欧洲毛片在线视频免费观看| 男人的天堂成人| 99在线精品视频在线观看| 国产精品入口免费软件| 精品一区二区在线免费观看| 久久久精品人妻一区二区三区| 波波电影院一区二区三区| 亚洲码无人客一区二区三区| 中文字幕中文乱码欧美一区二区| 婷婷色中文字幕| 精品久久久久久亚洲国产300 | 人人草在线视频| 国产欧美va欧美va香蕉在| 国产一区二区三区不卡av| 日韩高清dvd| 欧美精品综合| 成人亚洲视频在线观看| 国产精品18久久久久久久久久久久| 偷偷色噜狠狠狠狠的777米奇| 欧美激情一区二区| www.av视频在线观看| 欧美私人免费视频| 日本高清视频免费观看| 在线精品视频视频中文字幕| 后进极品白嫩翘臀在线播放| 国产精品mp4| 成人激情自拍| 亚洲欧美日韩另类精品一区二区三区 | 精品视频久久久久久| 国产福利视频在线| 国产91在线播放精品91| 综合伊人久久| 蜜桃成人在线| 韩国亚洲精品| 在线免费看v片| 国产日韩影视精品| 日韩精品国产一区二区| 欧美一三区三区四区免费在线看| 日本天堂在线| 97久久久免费福利网址| 四虎国产精品永久在线国在线| 欧美午夜欧美| 夜久久久久久| 久久久国产精品久久久| 最好看的中文字幕久久| 中文 欧美 日韩| 亚洲欧美中文日韩在线| 色一区二区三区| 成人午夜电影免费在线观看| 91精品国产麻豆国产在线观看 | 成人精品在线视频观看| 午夜国产福利一区二区| 欧美精品粉嫩高潮一区二区| 国产一级片在线播放| 欧美又大粗又爽又黄大片视频| 日韩第一区第二区| 大桥未久一区二区| 另类小说综合欧美亚洲| 成熟人妻av无码专区| 色婷婷综合在线| 日本高清中文字幕二区在线| 午夜精品福利视频| 欧美人与动xxxxz0oz| 日韩a∨精品日韩在线观看| 丁香六月综合激情| 国产这里有精品| 欧美一区二区三区婷婷月色| 免费人成在线观看播放视频| 国产欧美亚洲精品| 日韩av在线播放网址| 日日干夜夜操s8| 国产精品久久久久aaaa| 91片黄在线观看喷潮| 一区二区三欧美| 91大神在线观看线路一区| 日韩一二三区不卡在线视频| 男人的天堂亚洲一区| 国产视频精品免费| 欧美肥胖老妇做爰| 最近中文字幕免费mv2018在线| 96国产粉嫩美女| 亚洲日产国产精品| 国产精品无码永久免费不卡| 日韩欧美亚洲国产一区| 国产大片在线免费观看| 国产在线高清精品| 最新国产精品久久久| 亚洲精品无码一区二区| 香蕉成人伊视频在线观看| 你懂的视频在线观看| 国产精品免费在线免费| 91av精品| 中国xxxx性xxxx产国| 色美美综合视频| 日本高清视频在线播放| 亚洲综合在线播放| 影音先锋久久| 国产亚洲精品熟女国产成人| 欧美日本在线看| 青春草视频在线| 麻豆91蜜桃| 精品一区二区影视| 日本熟妇毛耸耸xxxxxx| 亚洲女人天堂成人av在线| 精品久久在线| av在线观看地址| 国产亚洲欧美日韩日本| 国产精品羞羞答答在线| 国内免费精品永久在线视频| 日韩精品免费一区二区在线观看 | 国产精品视频一二三区| aaa一区二区三区| 日本不卡免费高清视频| 91精品国产成人观看| 久久中文字幕人妻| 欧美精品少妇一区二区三区| 草草视频在线| 中文字幕在线亚洲精品| 99视频在线观看一区三区| 一本色道久久综合亚洲| 国外成人在线播放| 爽成人777777婷婷| 中文在线永久免费观看|