国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

這么寫參數校驗(Validator)就不會被勸退了~

共 8061字,需瀏覽 17分鐘

 ·

2020-04-19 23:21

來自:掘金(作者:錦成同學)

原文鏈接:

https://juejin.im/post/5d3fbeb46fb9a06b317b3c48


  • 為什么要用validator
  • 實戰(zhàn)演練
    • 1. @Validated 聲明要檢查的參數
    • 2. 對參數的字段進行注解標注
    • 3. 在全局校驗中增加校驗異常
    • 4. 測試
  • 自定義參數注解
    • 1. 比如我們來個 自定義身份證校驗 注解
    • 2. 然后自定義Validator
    • 3. 使用自定義的注解
    • 4.使用groups的校驗
    • 5.restful風格用法
  • 總結

很痛苦遇到大量的參數進行校驗,在業(yè)務中還要拋出異常或者 不斷的返回異常時的校驗信息,在代碼中相當冗長, 充滿了if-else這種校驗代碼,今天我們就來學習spring的javax.validation 注解式參數校驗.

為什么要用validator
  1. javax.validation的一系列注解可以幫我們完成參數校驗,免去繁瑣的串行校驗

    不然我們的代碼就像下面這樣:

?//??http://localhost:8080/api/user/save/serial

????/**
?????*?走串行校驗
?????*
?????*?@param?userVO
?????*?@return
?????*/

????@PostMapping("/save/serial")
????public?Object?save(@RequestBody?UserVO?userVO)?{
????????String?mobile?=?userVO.getMobile();

????????//手動逐個?參數校驗~?寫法
????????if?(StringUtils.isBlank(mobile))?{
????????????return?RspDTO.paramFail("mobile:手機號碼不能為空");
????????}?else?if?(!Pattern.matches("^[1][3,4,5,6,7,8,9][0-9]{9}$",?mobile))?{
????????????return?RspDTO.paramFail("mobile:手機號碼格式不對");
????????}

????????//拋出自定義異常等~寫法
????????if?(StringUtils.isBlank(userVO.getUsername()))?{
????????????throw?new?BizException(Constant.PARAM_FAIL_CODE,?"用戶名不能為空");
????????}

????????//?比如寫一個map返回
????????if?(StringUtils.isBlank(userVO.getSex()))?{
????????????Map?result?=?new?HashMap<>(5);
????????????result.put("code",?Constant.PARAM_FAIL_CODE);
????????????result.put("msg",?"性別不能為空");
????????????return?result;
????????}
????????//.........各種寫法?...
????????userService.save(userVO);
????????return?RspDTO.success();
????}

這被大佬看見,一定說,都9102了還這么寫,然后被勸退了.....

  1. 什么是javax.validation

JSR303 是一套JavaBean參數校驗的標準,它定義了很多常用的校驗注解,我們可以直接將這些注解加在我們JavaBean的屬性上面(面向注解編程的時代),就可以在需要校驗的時候進行校驗了,在SpringBoot中已經包含在starter-web中,再其他項目中可以引用依賴,并自行調整版本:

????????
????????
????????????javax.validation
????????????validation-api
????????????1.1.0.Final
????????

????????
????????
????????????org.hibernate
????????????hibernate-validator
????????????5.2.0.Final
????????


337f371531211fd3988f6e9d69ebe417.webp
  1. 注解說明
??????1.@NotNull:不能為null,但可以為empty("","?","???")
??????2.@NotEmpty:不能為null,而且長度必須大于0?("?","??")
??????3.@NotBlank:只能作用在String上,不能為null,而且調用trim()后,長度必須大于0("test")????即:必須有實際字符

驗證注解驗證的數據類型說明
@AssertFalseBoolean,boolean驗證注解的元素值是false
@AssertTrueBoolean,boolean驗證注解的元素值是true
@NotNull任意類型驗證注解的元素值不是null
@Null任意類型驗證注解的元素值是null
@Min(value=值)BigDecimal,BigInteger, byte,short, int, long,等任何Number或CharSequence(存儲的是數字)子類型驗證注解的元素值大于等于@Min指定的value值
@Max(value=值)和@Min要求一樣驗證注解的元素值小于等于@Max指定的value值
@DecimalMin(value=值)和@Min要求一樣驗證注解的元素值大于等于@ DecimalMin指定的value值
@DecimalMax(value=值)和@Min要求一樣驗證注解的元素值小于等于@ DecimalMax指定的value值
@Digits(integer=整數位數, fraction=小數位數)和@Min要求一樣驗證注解的元素值的整數位數和小數位數上限
@Size(min=下限, max=上限)字符串、Collection、Map、數組等驗證注解的元素值的在min和max(包含)指定區(qū)間之內,如字符長度、集合大小
@Pastjava.util.Date,java.util.Calendar;Joda Time類庫的日期類型驗證注解的元素值(日期類型)比當前時間早
@Future與@Past要求一樣驗證注解的元素值(日期類型)比當前時間晚
@NotBlankCharSequence子類型驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應用于字符串且在比較時會去除字符串的首位空格
@Length(min=下限, max=上限)CharSequence子類型驗證注解的元素值長度在min和max區(qū)間內
@NotEmptyCharSequence子類型、Collection、Map、數組驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)
@Range(min=最小值, max=最大值)BigDecimal,BigInteger,CharSequence, byte, short, int, long等原子類型和包裝類型驗證注解的元素值在最小值和最大值之間
@Email(regexp=正則表達式,flag=標志的模式)CharSequence子類型(如String)驗證注解的元素值是Email,也可以通過regexp和flag指定自定義的email格式
@Pattern(regexp=正則表達式,flag=標志的模式)String,任何CharSequence的子類型驗證注解的元素值與指定的正則表達式匹配
@Valid任何非原子類型指定遞歸驗證關聯的對象如用戶對象中有個地址對象屬性,如果想在驗證用戶對象時一起驗證地址對象的話,在地址對象上加@Valid注解即可級聯驗證

此處只列出Hibernate Validator提供的大部分驗證約束注解,請參考hibernate validator官方文檔了解其他驗證約束注解和進行自定義的驗證約束注解定義。

實戰(zhàn)演練

話不多說,直接走實踐路線,同樣使用的是SpringBoot的快速框架,詳細代碼見:github.com/leaJone/myb…

1. @Validated 聲明要檢查的參數

這里我們在控制器層進行注解聲明

?/**
?????*?走參數校驗注解
?????*
?????*?@param?userDTO
?????*?@return
?????*/

????@PostMapping("/save/valid")
????public?RspDTO?save(@RequestBody?@Validated?UserDTO?userDTO)?{
????????userService.save(userDTO);
????????return?RspDTO.success();
????}

2. 對參數的字段進行注解標注

import?lombok.Data;
import?org.hibernate.validator.constraints.Length;

import?javax.validation.constraints.*;
import?java.io.Serializable;
import?java.util.Date;

/**
?*?@author?LiJing
?*?@ClassName:?UserDTO
?*?@Description:?用戶傳輸對象
?*?@date?2019/7/30?13:55
?*/

@Data
public?class?UserDTO?implements?Serializable?{

????private?static?final?long?serialVersionUID?=?1L;

????/***?用戶ID*/
????@NotNull(message?=?"用戶id不能為空")
????private?Long?userId;

????/**?用戶名*/
????@NotBlank(message?=?"用戶名不能為空")
????@Length(max?=?20,?message?=?"用戶名不能超過20個字符")
????@Pattern(regexp?=?"^[\\u4E00-\\u9FA5A-Za-z0-9\\*]*$",?message?=?"用戶昵稱限制:最多20字符,包含文字、字母和數字")
????private?String?username;

????/**?手機號*/
????@NotBlank(message?=?"手機號不能為空")
????@Pattern(regexp?=?"^[1][3,4,5,6,7,8,9][0-9]{9}$",?message?=?"手機號格式有誤")
????private?String?mobile;

????/**性別*/
????private?String?sex;

????/**?郵箱*/
????@NotBlank(message?=?"聯系郵箱不能為空")
????@Email(message?=?"郵箱格式不對")
????private?String?email;

????/**?密碼*/
????private?String?password;

????/***?創(chuàng)建時間?*/
????@Future(message?=?"時間必須是將來時間")
????private?Date?createTime;

}

3. 在全局校驗中增加校驗異常

MethodArgumentNotValidException是springBoot中進行綁定參數校驗時的異常,需要在springBoot中處理,其他需要 處理ConstraintViolationException異常進行處理.

  • 為了優(yōu)雅一點,我們將參數異常,業(yè)務異常,統一做了一個全局異常,將控制層的異常包裝到我們自定義的異常中
  • 為了優(yōu)雅一點,我們還做了一個統一的結構體,將請求的code,和msg,data一起統一封裝到結構體中,增加了代碼的復用性
import?com.boot.lea.mybot.dto.RspDTO;
import?org.slf4j.Logger;
import?org.slf4j.LoggerFactory;
import?org.springframework.dao.DuplicateKeyException;
import?org.springframework.web.bind.MethodArgumentNotValidException;
import?org.springframework.web.bind.annotation.ExceptionHandler;
import?org.springframework.web.bind.annotation.RestControllerAdvice;
import?org.springframework.web.servlet.NoHandlerFoundException;

import?javax.validation.ConstraintViolationException;
import?javax.validation.ValidationException;


/**
?*?@author?LiJing
?*?@ClassName:?GlobalExceptionHandler
?*?@Description:?全局異常處理器
?*?@date?2019/7/30?13:57
?*/

@RestControllerAdvice
public?class?GlobalExceptionHandler?{

????private?Logger?logger?=?LoggerFactory.getLogger(getClass());

????private?static?int?DUPLICATE_KEY_CODE?=?1001;
????private?static?int?PARAM_FAIL_CODE?=?1002;
????private?static?int?VALIDATION_CODE?=?1003;

????/**
?????*?處理自定義異常
?????*/

????@ExceptionHandler(BizException.class)
????public?RspDTO?handleRRException(BizException?e)?{
????????logger.error(e.getMessage(),?e);
????????return?new?RspDTO(e.getCode(),?e.getMessage());
????}

????/**
?????*?方法參數校驗
?????*/

????@ExceptionHandler(MethodArgumentNotValidException.class)
????public?RspDTO?handleMethodArgumentNotValidException(MethodArgumentNotValidException?e)?{
????????logger.error(e.getMessage(),?e);
????????return?new?RspDTO(PARAM_FAIL_CODE,?e.getBindingResult().getFieldError().getDefaultMessage());
????}

????/**
?????*?ValidationException
?????*/

????@ExceptionHandler(ValidationException.class)
????public?RspDTO?handleValidationException(ValidationException?e)?{
????????logger.error(e.getMessage(),?e);
????????return?new?RspDTO(VALIDATION_CODE,?e.getCause().getMessage());
????}

????/**
?????*?ConstraintViolationException
?????*/

????@ExceptionHandler(ConstraintViolationException.class)
????public?RspDTO?handleConstraintViolationException(ConstraintViolationException?e)?{
????????logger.error(e.getMessage(),?e);
????????return?new?RspDTO(PARAM_FAIL_CODE,?e.getMessage());
????}

????@ExceptionHandler(NoHandlerFoundException.class)
????public?RspDTO?handlerNoFoundException(Exception?e)?{
????????logger.error(e.getMessage(),?e);
????????return?new?RspDTO(404,?"路徑不存在,請檢查路徑是否正確");
????}

????@ExceptionHandler(DuplicateKeyException.class)
????public?RspDTO?handleDuplicateKeyException(DuplicateKeyException?e)?{
????????logger.error(e.getMessage(),?e);
????????return?new?RspDTO(DUPLICATE_KEY_CODE,?"數據重復,請檢查后提交");
????}


????@ExceptionHandler(Exception.class)
????public?RspDTO?handleException(Exception?e)?{
????????logger.error(e.getMessage(),?e);
????????return?new?RspDTO(500,?"系統繁忙,請稍后再試");
????}
}

4. 測試

如下文:確實做到了參數校驗時返回異常信息和對應的code,方便了我們不再繁瑣的處理參數校驗

4905d5bfee1afbf48c7ae56e13b465ef.webp

在ValidationMessages.properties 就是校驗的message,有著已經寫好的默認的message,且是支持i18n的,大家可以閱讀源碼賞析

自定義參數注解

1. 比如我們來個 自定義身份證校驗 注解

@Documented
@Target({ElementType.PARAMETER,?ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy?=?IdentityCardNumberValidator.class)
public?@interface?IdentityCardNumber?{

????String?message()?default?"身份證號碼不合法";

????Class[]?groups()?default?{};

????Class[]?payload()?default?{};
}

這個注解是作用在Field字段上,運行時生效,觸發(fā)的是IdentityCardNumber這個驗證類。

  • message 定制化的提示信息,主要是從ValidationMessages.properties里提取,也可以依據實際情況進行定制
  • groups 這里主要進行將validator進行分類,不同的類group中會執(zhí)行不同的validator操作
  • payload 主要是針對bean的,使用不多。

2. 然后自定義Validator

這個是真正進行驗證的邏輯代碼:

public?class?IdentityCardNumberValidator?implements?ConstraintValidator<IdentityCardNumber,?Object>?{

????@Override
????public?void?initialize(IdentityCardNumber?identityCardNumber)?{
????}

????@Override
????public?boolean?isValid(Object?o,?ConstraintValidatorContext?constraintValidatorContext)?{
????????return?IdCardValidatorUtils.isValidate18Idcard(o.toString());
????}
}

IdCardValidatorUtils在項目源碼中,可自行查看

3. 使用自定義的注解

????@NotBlank(message?=?"身份證號不能為空")
????@IdentityCardNumber(message?=?"身份證信息有誤,請核對后提交")
????private?String?clientCardNo;

4.使用groups的校驗

有的寶寶說同一個對象要復用,比如UserDTO在更新時候要校驗userId,在保存的時候不需要校驗userId,在兩種情況下都要校驗username,那就用上groups了:

先定義groups的分組接口CreateUpdate

import?javax.validation.groups.Default;

public?interface?Create?extends?Default?{
}

import?javax.validation.groups.Default;

public?interface?Update?extends?Default{
}

再在需要校驗的地方@Validated聲明校驗組

?/**
?????*?走參數校驗注解的?groups?組合校驗
?????*
?????*?@param?userDTO
?????*?@return
?????*/

????@PostMapping("/update/groups")
????public?RspDTO?update(@RequestBody?@Validated(Update.class)?UserDTO?userDTO)?{
????????userService.updateById(userDTO);
????????return?RspDTO.success();
????}

在DTO中的字段上定義好groups = {}的分組類型

@Data
public?class?UserDTO?implements?Serializable?{

????private?static?final?long?serialVersionUID?=?1L;

????/***?用戶ID*/
????@NotNull(message?=?"用戶id不能為空",?groups?=?Update.class)
????private?Long?userId;

????/**
?????*?用戶名
?????*/

????@NotBlank(message?=?"用戶名不能為空")
????@Length(max?=?20,?message?=?"用戶名不能超過20個字符",?groups?=?{Create.class,?Update.class})
????@Pattern(regexp?=?"^[\\u4E00-\\u9FA5A-Za-z0-9\\*]*$",?message?=?"用戶昵稱限制:最多20字符,包含文字、字母和數字")
????private?String?username;

????/**
?????*?手機號
?????*/

????@NotBlank(message?=?"手機號不能為空")
????@Pattern(regexp?=?"^[1][3,4,5,6,7,8,9][0-9]{9}$",?message?=?"手機號格式有誤",?groups?=?{Create.class,?Update.class})
????private?String?mobile;

????/**
?????*?性別
?????*/

????private?String?sex;

????/**
?????*?郵箱
?????*/

????@NotBlank(message?=?"聯系郵箱不能為空")
????@Email(message?=?"郵箱格式不對")
????private?String?email;

????/**
?????*?密碼
?????*/

????private?String?password;

????/***?創(chuàng)建時間?*/
????@Future(message?=?"時間必須是將來時間",?groups?=?{Create.class})
????private?Date?createTime;

}

注意:在聲明分組的時候盡量加上 extend javax.validation.groups.Default否則,在你聲明@Validated(Update.class)的時候,就會出現你在默認沒添加groups = {}的時候的校驗組@Email(message = "郵箱格式不對"),會不去校驗,因為默認的校驗組是groups = {Default.class}.

5.restful風格用法

在多個參數校驗,或者@RequestParam 形式時候,需要在controller上加注@Validated

?@GetMapping("/get")
????public?RspDTO?getUser(@RequestParam("userId")?@NotNull(message?=?"用戶id不能為空")?Long?userId)?{
????????User?user?=?userService.selectById(userId);
????????if?(user?==?null)?{
????????????return?new?RspDTO().nonAbsent("用戶不存在");
????????}
????????return?new?RspDTO().success(user);
????}


@RestController
@RequestMapping("user/")
@Validated
public?class?UserController?extends?AbstractController?{

....圣洛代碼...


總結

用起來很簡單,soEasy,重點參與的統一結構體返回,統一參數校驗,是減少我們代碼大量的try catch 的法寶,我覺得在項目中,將異常處理好,并將異常做好日志管理,才是很好的升華,文章淺顯,只是一個菜鳥的進階筆記....

這里只是個人見解,技術菜,歡迎大佬不吝賜教... 我是一個小白,技術在不斷的更新迭代,我只有不斷的填充自己的空白才能....跟上大佬們的步伐...


推薦閱讀:


6acbae89cd05e80399f3df2f274d684f.webp喜歡我可以給我設為星標哦6acbae89cd05e80399f3df2f274d684f.webp

7b76b3357b290fbbba3fddeadc11780a.webp

好文章,我?在看?

74cb3f62d66f35e7769a7a34f7160ded.webp
瀏覽 56
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 亚洲Av无码成人专区擼| 亚洲欧美性爱| 91欧美精品| 91欧美性爱| 不卡精品| 国产激情无码| 国产偷拍网站| 无码在线不卡| 国产成人777777精品综合| 成人视频观看| 中文字幕在线无码| 亚洲免费性爱视频| 九九碰九九爱97超碰| 91干干| 日韩成人无码影片| 欧美夜夜草视频| 久久99深爱久久99精品| 综合色播| 亚洲色,天堂网| 在线播放高清无码| 性欧美XXXX| 亚洲午夜福利| 亚洲性爱视频在线观看| 日韩成人精品视频| 一道本无码在线播放| 国产探花自拍| 大香蕉美女视频| 黄片网站在线观看| 免费A级毛片在线播放不收费| 一区二区三区电影| 中国免费XXXX18| 一本一道波多野结衣潮喷视频| 人人澡人人爽欧一区| 99精品在线| 国产久久这里只有精品视频| 91精品国产偷窥一区二区| 久久久久久久久久成人永久免费视频| 黄色av免费在线| 免费黄色小视频在线观看| 国产欧美综合视频一区二区在线 | 国产精品18进进出出17c| 欧美a在线| 国产毛片基地| 大香蕉中文网| 亚洲狼友视频| 亚洲成人av在线播放| www黄片视频| 亚洲综合社区在线| 精品操逼| 欧美一二区| 成人片在线| 一级操逼毛片| 国产毛片久久久久久久| 精品一区二区三区四区学生| 翔田千里53歳在线播放| www.在线播放| 激情五月天婷婷| 天天激情| 日韩高清不卡| 东京热一区二区三区| 精品一区无码| 日韩在线一| 5D肉蒲团| 亚洲国产视频一区| 成人H视频| 亚洲欧美婷婷五月色综合| 性视频人人| 亚洲无码二区| 人人精品| 东京热综合网| 国产操逼逼| 99色综合| 黄色视频在线观看国产| 黄色A片免费看| 欧美丁香五月| 先锋影音资源AV| 丰滿人妻一区二区三| 看免费操逼视频| 日本www视频| 老熟女AV| 99色播| 一级大毛片| 大香蕉久久| 欧美日韩一| 亚洲综合色网| 久久久网站| 日本无码一区二区三区| 一级婬片A片AAAA毛片A级 | 亚洲高清无码一区二区三区| 日韩欧美精品18| 日本中文字幕亚洲| 天干夜天干天天天爽视频| 亚洲AV成人无码一区二区三区 | 久久黄色片| 麻豆91视频| 午夜无码福利| 国产精品一区二区三| 久久午夜视频| 免费乱伦| 日本黄网站| 婷婷久久综| 99久久精品国产精品有折扣吗| 成人无码区免费| 内射视频免费观看| 免费在线观看a片| 日韩性做爰免费A片AA片| 又黄又爽的网站| 五月丁香激情婷婷| 91在线无码精品秘入口男同 | 夜夜嗨AⅤ一区二区三区| 97精品超碰一区二区三区| 国产Av资源| 久久国产2025| 天堂中文资源在线观看| 国产黄色Av| 手机看片1024你懂的| 777米奇视频| 黄色电影地址| 欧美AAAAAAAAAA特级| 苍井空视频| 97婷婷五月天| 人人看,人人摸| 在桌下含她的花蒂和舌头H视频| 成人69AV| 91久久午夜无码鲁丝片久久人妻| 免费AV影片| 五月婷婷精品| 亚洲在线第一页| 久草资源在线观看| 午夜福利1000| 中文字幕+乱码+中文字幕电视剧| 免费一级A毛片夜夜看| 丁香婷婷五月色成人网站| 2014AV天堂网| 一本道在线无码| 中国操逼视频| 爱搞搞就搞搞| 国产操屄视频| 国产精品毛片| 蝌蚪AV| 国产一级免费在线观看| 亚洲午夜影院在线| av无码av天天av天天爽| AV在线四季综合网站| 在线视频一区二区| 开心五月激情网| 91天堂在线| 国产精品秘久久久久久1-~/\v7-/ 囯产精品一区二区三区线一牛影视1 | 在线观看免费黄视频| 亚洲免费视频在线看| AV无码一区| 日本老女人视频| 亚洲欧美日韩动漫| 成人精品一区二区区别解析| 成人伊人综合| 99涩涩| 国产激情在线播放| 少妇精品| 国产非洲欧美在线| 日日Av| 午夜精品一区二区三区在线成人 | wwwsesese| 亚洲涩情91日韩一区二区| 午夜欧美| 伊人久久大香| 婷婷亚洲综合| 成人手机AV| 成人亚洲精品一区二区三区| 天堂国产一区二区三区| 无码爆操| 69er小视频| 色六月婷婷| 夜夜草视频| 91av在线看| 欧美色五月| 亚洲国产女人| 欧美精品操逼| 日韩不卡一区二区三区| 久操99| а√最新版在线中文8| 亚洲免费一区二区| 中文在线视频| 丁香六月操| 九九惹伊人| 成人性爱视频免费观看| 超碰人人操人人摸| 色五月中文字幕| 成人黄色一级片| 成人A片视频| 色妞视频精品一区| 人妻丰满熟妇| 深夜福利一区二区| 男人的天堂色婷婷| www.男人天堂| 一区二区三区日韩| 国内精产品一二区秘| 中文字幕+乱码+中文字幕一区 | 婷婷五月丁香色| 国产欧美综合一区二区三区| 热99精品| 无套免费视频欧美| 青草视屏| 丰满人妻一区二区三区四区54| 无码三| 亚洲小视频在线观看| 国产视频久久| 亚州精品成人片| 日本色天堂| 91无码秘蜜桃一区二区三区-百度| 亚洲最新在线观看| 国产精品久久久大香蕉| 粉嫩av懂色av蜜臀av熟妇| 69式荫蒂被添全过程频| 伊人网大香蕉| 天天操天天操天天操天天| 美女高潮在线| 91超碰久久在线| 九九九成人网| 国产777| 久久日韩无码| 99黄色电影| 日日干综合| 在线免费观看黄| 人人色人人操| 日B视频网站| 性爱小说视频| 大香蕉久热| 久久久999| 丁香四月婷婷| 免费人成在线观看视频播放| 影音先锋av资源在线| 一区二区三区无码在线| 无码视频免费观看| 成年人免费看视频| 污视频网站在线观看| 2018天天干天天操| 亚洲四区| 天天操视频网站| 日本一区二区视频在线| 色综合久久天天综合网| 天天综合视频| 亚洲午夜影院在线| 九九小视频| 成人福利网| 无码高清在线观看| 三级理论网站| 67194国产| 日本黄色中文字幕| 中文字幕福利电影| 深爱激情综合网| 日韩一级片在线播放| 91成人视频在线播放| 成人激情视频A极| 婷婷丁香五月网| 国产色情视频在线观看| www香蕉成人片com| 米奇电影777无码| 国产免费久久久| 中文无码一区二区三区| 国产乱子伦真实精品| 国产精品扒开腿| 免费网站观看www在线观| 日韩成人高清无码| 国产AV自拍-久| 在线观看中文字幕无码| 激情综合婷婷久久| 久久久久久网站| 91久久精品国产91久久公交车| 国产成人午夜高潮毛片| 成人黄片视频| 天天操天天干欧美精品| 色综合久久88色综合| 91超碰免费| 无码高清在线观看| 成人免费av| 亚洲爱| 91AV在线播放| 躁BBB躁BBB躁BBBBBB日视频| 日韩成人视频在线| 人人色人人| 五月天狠狠| 欧美A片在线| 欧美三级| 日本视频在线免费| 成人AV十八亚洲二区| 日韩国产AV| 国产美女激情视频| 日韩一级片在线播放| 中文字幕乱妇无码Av在线| 国产特黄级AAAAA片免| 激情人妻av| 日本免费在线| 亚洲欧美日本在线| 亚洲AV无一区二区三区久久| 一区二区高清无码| 亚洲综合图色40p| 日韩人妻无码一区二区三区| 国产视频久久| 免费日B视频| 亚洲在线视频免费观看| 亚洲AV在线看| 国产精品美女毛片j酒店| 成人黄片18| 亚洲vs无码蜜桃少妇| 黄色片网站免费观看| 人妻视频网站| 日本成人免费电影| 60分钟上大床又黄又爽| 天堂vs亚洲| 无码天天| 91视频在线免费看| 在线免费看黄色| 第四色视频| 欧洲操逼视频| 超碰小说| 一级欧美黑人大战白妞| 加勒比久久综合| 日韩国产成人在线| 日韩AV免费电影| 在线成人一区二区| 青青草大香蕉伊人| 成人日韩无码| 在线看的av| 国产在线视频一区| 国产黄色免费视频| 久久18| 99视频自拍| 大香蕉在8线| 在线视频你懂得| 国产超级无码高清在线视频观看 | 国产欧美精品在线观看| 天天躁夜夜躁狠狠躁AV| 成人777| 国产成人h| Av大香蕉| 色吊妞| 国产91网| 久久久www| 91妻人人澡人人爽人人精品 | 亚洲三级视频| 日本黄色视频网| 国产a√| 竹菊av一区二区三区四区五区| 欧美淫乱视频| 国产美女18毛片水真多| 国产成人性爱| 国精产品一区一区三区四区| 大香蕉这里只有精品| 中文字幕无码AV| 91国产精品在线| 婷婷久久综合久色综| 久久免费成人电影| 操久久久| 成人性生交片无码免费看人| 免费久久久| 国产高清无码免费视频| 91精品国产aⅴ一区二区| 国产在线观看欧美| 亚洲少妇无码| 无码av无码AV| 欧美性爱手机在线| 久久偷拍视频| 人人摸人人操人人干| 亚洲小电影| 操女人大逼| 久久精品一区二区三区四区五区| 国产ts| 国产成人精品AV在线观| japanese在线观看| 欧美一区二区三区视频| 精品一区二区三区四| 9I成人免费版| 亚洲在线观看中文字幕| 丁香六月激情| 无码中文字幕在线观看| 99黄色电影| 中文黄片| 国产精品久久久久久99| jk无码| 爱搞搞就要爱搞搞| 最近中文字幕免费MV第一季歌词怀孕 | 日韩AV中文| 成人小视频十八禁免费观看| 亚洲爆乳无码一区二区三区| 中文字幕韩日| 一级内射视频| 天天插天天日| 操逼视频网| 日本边摸边吻奶边做爰| 91内射| 四川少妇bbbbbbbbb| 亚洲日韩中文字幕| 黄色在线免费观看网站| 中国乱伦视频| 影音先锋天堂网| 国产精品久久久91| 日韩午夜福利| 欧美三级不卡| 欧美国产日韩在线| 天天日天天操天天爽| 东北毛片| 久久国产亚洲| 91性爱| av影片在线播放| 国产三四区久久| 亚洲www在线| 午夜福利2025| 国产一级二级在线观看| 曰韩一级A片| 婷婷激情久久| 国产人成| 久久婷婷视频| 大香蕉网伊人在线| 日韩无任何视频在线观看| 午夜精品久久久| 3D精品啪啪一区二区免费| 国产成人无码永久免费| 久久久久久久AV| 九色91视频| 亚洲男女免费视频| 成人小视频观看| 艳妇乳肉豪妇荡乳AV无码福利| 在线观看黄片网站| a网站在线观看| av天堂资源在线| 久草人妻| 无码中文AV| 国产变态另类| 黄色美女网站| 最近最火中文字幕mv歌词| 欧美一级爱爱| 美女极度色诱图片www视频| 日韩AV无码网站| 7777影视电视剧在线观看官网| 人人上人人操| 亚洲成人免费| 精品国产重口乱子伦| 九九中文字幕| 亚洲色图一区二区三区| 息子交尾一区二区三区| 日韩无码人妻| 91无码人妻一区二区| 中文字幕自拍偷拍| 1级毛片| 老司机精品| 五月婷婷六月丁香| 日韩欧美精品一区二区| 热热热热色| 黄色大片在线免费观看| 内射| 国产A级成人婬片1976| 一级欧美视频| 天堂va欧美ⅴa亚洲va一夜| 久久v| 亚洲AV小说| 91人妻人人澡人人爽人人精品一| 大香蕉69| 色骚综合| 亚州精品成人片| jizzjizzjizzjizz| 久99久视频| 久在草| 色色视频网站| 天堂a√在线8| 欧美日韩一区二区三区在线电影| 最新中文字幕在线视频| 人人妻天天干| 青草成人在线视频| 三级高清无码| 九一成人电影| 国产在线久久久| 欧美国产激情| 日韩久久高清| 91东热激情| 免费精品99| 91超碰人人| 毛片网站大全| 国产女人18毛片18精品| 777超碰| 最新av网| 国精产品一区二区三区| 精品亚洲无码视频| 先锋AV资源在线| 免费av在线| 91成人导航| 九九九九九精品| 免费观看久久久| 4438成人网| AV怡红院| 免费观看日韩无码视频| 一区二区不卡视频| 亚洲人妻一区二区| 日韩黄色片在线观看| 无码网址| 国精产品一品二品国精| 亚洲成人不卡| 日本少妇bbw| 91精品国产欧美一区二区成人| 国产黄色视频在线免费看| 免费看黄片视频| 亚洲免费婷婷| 日批国产| 特写毛茸茸BBwBBwBBw| 亚洲三级网站在线观看| 日产毛片| 亚洲秘av无码一区二区| 婷婷五月天成人社区| 影音先锋一区二区| 天天爽夜夜爽人人爽| AV大片在线观看| 亚洲欧美精品AAAAAA片| 熟妇一区| 91麻豆精品国产91久久久吃药 | www.豆花视频成人版| 色婷婷在线视频播放| 国产自偷自拍| 无码成人av| 天天爽天天摸| 天堂视频中文在线| 日韩精品在线播放| 亚洲AV动漫| 一级a看片在线观看| 六月婷婷七月丁香| 国产视频福利| 91在线无码精品秘蜜桃入口| 一级爱爱爱| 超碰av电影| 丝袜美女足交| 欧美大香蕉在线| 99视频精品全部免费看| 国产精品国产三级国产| 日本黄A级A片国产免费| 免费看欧美成人A片无码| 日本无码成人| jlzz18| 婷婷五月999| 黄色三级视频在线观看| 国产一区二区成人久久919色 | 可以看的黄色视频| AV电影免费看| 欧美日韩国产精品| 国产欧美日韩| 免费无码一级A片大黄在线观看| 91一级A片在线观看| 日韩无码人妻久久一区二区三区 | 日韩高清无码人妻| 九九黄色| 色婷婷在线视频播放| 亚洲综合社区在线| 国产免费AV片| 婷婷五月综合在线| 少妇高潮在线| 免费人成视频观看| 午夜成人亚洲| 大香蕉久草| 91人妻人人澡人人| 亚洲无码精品一区二区三区| 日韩无码1| 一区二区精品视频| 在线观看黄片| 亚洲天堂免费| 中文字幕免费高清网站| 丰满人妻一区二区三区四区53| 艹逼视频免费观看| 一本一道久久a久久精品综合| 日韩特黄| 看毛片网址| AV先锋资源| 翔田千里在线观看| 亚洲视频99| 欧美男女日逼视频| 无码免费观看视频| 91久久久久久久| 成人网站高清无码| 91大神shunv| 五月丁香成人电影| 91视频成人版一区二区| 成人在线免费观看视频| 中文字幕性爱| 亚洲自拍无码| 翔田千里在线播放| 黄片视频在线免费看| 97免费在线视频| 一级大毛片| 人人精品| 91人妻人人爽| 成人在线免费网站| 精品一区二区三区在线观看| www444www| 黄色大片网址| 蜜桃av久久久亚洲精品| 欧美级毛片高潮| 人人插人人| 亚洲色欧美| 午夜激情五月天| 亚洲黄色视频网站在线观看| 日本黄色色情视频| 91无码人妻精品一区二区三区四| 亚洲人人妻| 久久人搡人人玩人妻精AV香蕉| 91传媒在线观看| 一级黄色电影网| 国产免费AV网站| 久久久久久久大香蕉| 国产探花在线观看| 色欲精品| 蜜臀无码在线| 男女抽插视频| 国产中文字幕AV| 欧美大片视频| 美女一级片| 日本无码人妻| 日本黄色中文字幕| 97视频在线观看免费| 青青草原无码| 精品一区电影| 影音先锋成人AV资源| 久久免费看| 激情五月婷婷网| 爱爱视频无码| 国产老熟女高潮毛片A片仙踪林| 欧美三级在线| 一级AA片| 逼特逼在线观看| 久久久久大香蕉| 日韩一级在线播放| 成人国产精品在线看| 亚洲无线视频| 国产精品AV在线观看| 国产一级片电影| 人人摸人人看人人草| 亚洲精品无码更新| 色XXX| 蜜桃在线一区| 日韩欧美一级A片| 91麻豆天美传媒在线| 91麻豆国产在线观看| 青青操逼| 爱福利视频网| 日本黄色免费视频| 无码电影网| 日本中文字幕无码| 亚洲精品国产AV| 久久综合五月| 亚洲国产精品久久人人爱| 日韩高清av| 精品自拍偷拍| 欧美性爱五月天| 91黄色在线观看| 日韩中文无| 91吴梦梦一区二区传媒| 亚洲欧美第一页| 欧洲美一区二区三区亚洲| 十八女人高潮A片免费| 91黑人丨人妻丨国产丨| 人人爽爽| 亚洲第一色婷婷| av在线三级| 欧美国产在线观看| 黄色AV免费观看| 尻屄视频免费| 日韩欧美高清无码| 六月婷婷在线| 91av在线观看视频| 国产黄色Av| 91视频免费| 日本草逼网| 无码蜜桃一区二区| 97资源在线视频| 国产网站视频| 美女扣逼网站| 成年人视频免费| 午夜ww| 亚洲AV成人一区二区三区不卡 | 在线二区| 一本道无码在线观看| 日韩在线视频免费观看| 日韩免费在线| 麻豆性爱| 99热在线播放| 蜜桃一区二区中午字幕| 色香蕉视频在线观看| 秋霞精品一区二区三区| 高清无码免费在线视频| 日本黄A级A片国产免费| 中文字幕一区二区三区人妻在线视频| 亚洲精品一线| 99伊人在线| 97精产国品久久蜜桃臀| 成人黄色一级A片| 色综合99久久久无码国产精品| 欧美一级生活片| 国产18水真多18精品| 精品欧美成人片在线| 最近日本中文字幕中文翻译歌词| 欧美在线中文| 一级二级三级视频| 一本色综合亚洲精品| 欧美性性生交XXXXX无码| 高清无码做爱视频| 精品成人A片久久久久久不卡三区| 婷婷五月丁香花| 91爱爱网| 今天成全在线观看高清| 天天操天| 在线观看视频一区| 人妻在线你懂的| 这里只有精品91| 色天堂色男人| 天天干天天在线观看| 女人BBBB| 国产香蕉视频在线播放| 九色PORNY国产成人| 成人网址大全| 特级西西444www大精品| 亚洲无码在线视频播放| 伊人网大香| 日韩成人一区| 农村A片婬片AAA毛片| 日韩18禁| 嫩草视频在线观看免费网站 | 2019天天干| 白嫩外女BBWBBWBBW| 日韩一级a片| 做爱网站| 四虎2025在线51| 苍井空无码一区二区三区| 国产精品无码成人AV电影| 乱伦小说五月天| 久久久久亚洲AV无码网影音先锋| 污视频网站在线观看| 亚洲成人影片在线观看| 免费乱伦视频| 日本精品一区二区三区四区的功能| 九九热精品在线| 亚洲黄色电影| 欧美性爱XXXX| 黄色视频免费| 成人777777免费视频色| 国产精品秘久久久久久| 91精品丝袜久久久久久久久粉嫩| 日韩激情无码一区二区| 亚洲va国产va天堂va久久| 爽好紧别夹喷水无码| 国产免费精彩视频| 91蜜臀在线| 手机看片欧美+日韩+国产| 69欧美视频| 久草性爱| 国产色五月| 日韩免费无码| 天天日夜夜| 青青娱乐亚洲无| 亚欧美日韩| 色综合色综合色综合| 大香蕉伊人精品| 成人无遮挡| 99激情视频| 精品免费视频| 综合成人在线| 蜜臀久久99精品久久久久久宅男| 99在线精品视频观看| 青青操久久| 日韩久久免费视频| 苍井空无码| 欧美footjob高跟脚交| www.777熟女人妻| 美日韩一区| 日韩中文无码字幕| 色天天综合网| 亚洲精品秘一区二区三线观看| 人人操人人| 欧美性爱免费在线视频| 日日夜夜无码| 人人看人人搂人人摸| 丰满老妇高潮一级A片| 免费视频a| 日本伊人在线综合视频| 黄网站欧美内射| 欧美中文字幕视频| 日韩无码影视| 国产精品91视频| 久久一级片| 免费观看一级A片| 北条麻妃中文字幕旡码| 要操逼网| 免费高潮视频| 69精品视频| 激情视频免费看| 先锋资源日韩| 欧美黄页| 国产淫语| 天天干天天干天天| 成人午夜A片免费看| 麻豆国产91| 色五月在线观看| 中文字幕在线观看AV| 亚洲中文在线观看| 亚洲天堂在线观看视频网站| 国产免费av在线| 欧美操人| 99视频在线播放| 丝袜诱惑AV| 天天干精品| 日本在线一区| 麻豆国产精品一区| 超碰青娱乐| 影音先锋女人aV鲁色资源网站| jt33免费观看高清| 激情丁香六月| 国产综合激情| 91香蕉在线观看视频在线播放| 久久都是精品| 无码在线不卡| 国产无码高潮在线| 亚洲AV在线看| 国产综合无码| 久草手机视频在线观看| 亚洲性爱av| 欧美精品成人免费片| 天天色天天色| 日韩成人观看| 加勒比无码高清| 淫一区二区| 日韩一区二区三区四区久久久精品有吗 | 午夜爱爱免费视频| 亚洲小穴| 久久久久三级片| 人人肏肏人人| 亚洲黄色在线免费观看| 亚洲AV免费电影| 91免费视频在线| 色婷婷久久久久swag精品| 扒开让我91看片在线看| 最新国产精品| 人妻互换一二三区免费| 精品欧美片在线观看步骤| 天堂a在线8| 欧美疯狂做受XXXXX高潮| GOGO人体做爰大胆视频| 黄色视频免费观看| 另类老妇性BBwBBw图片| www.激情五月天| 色九九| 探花在线| 亚洲网站免费| 美女做爱网站| 丁香五月亚洲综合| 亚洲日韩免费| aaa在线| 日韩一级一片| 操鸡视频在线观看| 西西人体大胆裸体A片| 精品免费国产一区二区三区四区的使用方法 | 996热re视频精品视频这里| 亚洲中文久久| 91偷拍视频| 亚洲AAA电影| 亚洲天堂视频在线播放| 亚洲激情综合网| 一本色道88久久加勒比精品| 999热视频| 91视频久久久| 欧洲天堂在线视频网站| 国产无码操逼视频| 国产精品成人影视| 一区二区三区四区无码| 欧美一区二区三区系列电影| 激情精品| 人妻少妇精品| AV国产在线观看| 天堂中文资源库| 97综合| 亚洲中文AV在线| 日逼欧美| 色老板免费视频| 国产亚洲网| 亚洲精品色图| 国产av一区二区三区| 成年人免费毛片| 日韩黄色在线| 日本东京热视频| 99久久亚洲精品日本无码| 亚洲V国产v欧美v久久久久久 | 91传媒在线观看| 久久A级片| 浮力影院欧美| 亚洲无码成人| 黑人毛片91久久久久久| 日韩小视频在线观看| 白虎高清无码大尺度免费在线观看 | 制服丝袜强奸乱伦| 欧美日本一区二区三区| 熟妇一区二区| 国产精品一二三区| 久久久无码AV| A级黄色电影| 欧美成人伦理片网| 蜜桃91精品| 躁BBB躁BBB添BBBBBB|