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

之前寫參數(shù)校驗(Validator),差點被勸退...

共 18153字,需瀏覽 37分鐘

 ·

2023-01-04 02:31

關(guān)注我們,設(shè)為星標,每天7:40不見不散,架構(gòu)路上與您共享

回復(fù)架構(gòu)師獲取資源


大家好,我是你們的朋友架構(gòu)君,一個會寫代碼吟詩的架構(gòu)師。

'javajgs.com';


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

為什么要用validator

1、javax.validation的一系列注解可以幫我們完成參數(shù)校驗,免去繁瑣的串行校驗

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

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

/**
 * 走串行校驗
 *
 * @param userVO
 * @return
 */
@PostMapping("/save/serial")
public Object save(@RequestBody UserVO userVO) {
    String mobile = userVO.getMobile();

    //手動逐個 參數(shù)校驗~ 寫法
    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<String, Object> 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參數(shù)校驗的標準,它定義了很多常用的校驗注解,我們可以直接將這些注解加在我們JavaBean的屬性上面(面向注解編程的時代),就可以在需要校驗的時候進行校驗了,在SpringBoot中已經(jīng)包含在starter-web中,再其他項目中可以引用依賴,并自行調(diào)整版本:

<!--jsr 303-->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<!-- hibernate validator-->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.0.Final</version>
</dependency>

34_2.png

1、注解說明

1、@NotNull:不能為null,但可以為empty(""," ","   ")      
2、@NotEmpty:不能為null,而且長度必須大于0 (" ","  ")
3、@NotBlank:只能作用在String上,不能為null,而且調(diào)用trim()后,長度必須大于0("test")    即:必須有實際字符
    
驗證注解驗證的數(shù)據(jù)類型說明
@AssertFalseBoolean,boolean驗證注解的元素值是false
@AssertTrueBoolean,boolean驗證注解的元素值是true
@NotNull任意類型驗證注解的元素值不是null
@Null任意類型驗證注解的元素值是null
@Min(value=值)BigDecimal,BigInteger, byte,short, int, long,等任何Number或CharSequence(存儲的是數(shù)字)子類型驗證注解的元素值大于等于@Min指定的value值
@Max(value=值)和@Min要求一樣驗證注解的元素值小于等于@Max指定的value值
@DecimalMin(value=值)和@Min要求一樣驗證注解的元素值大于等于@ DecimalMin指定的value值
@DecimalMax(value=值)和@Min要求一樣驗證注解的元素值小于等于@ DecimalMax指定的value值
@Digits(integer=整數(shù)位數(shù), fraction=小數(shù)位數(shù))和@Min要求一樣驗證注解的元素值的整數(shù)位數(shù)和小數(shù)位數(shù)上限
@Size(min=下限, max=上限)字符串、Collection、Map、數(shù)組等驗證注解的元素值的在min和max(包含)指定區(qū)間之內(nèi),如字符長度、集合大小
@Pastjava.util.Date,java.util.Calendar;Joda Time類庫的日期類型驗證注解的元素值(日期類型)比當前時間早
@Future與@Past要求一樣驗證注解的元素值(日期類型)比當前時間晚
@NotBlankCharSequence子類型驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時會去除字符串的首位空格
@Length(min=下限, max=上限)CharSequence子類型驗證注解的元素值長度在min和max區(qū)間內(nèi)
@NotEmptyCharSequence子類型、Collection、Map、數(shù)組驗證注解的元素值不為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任何非原子類型指定遞歸驗證關(guān)聯(lián)的對象如用戶對象中有個地址對象屬性,如果想在驗證用戶對象時一起驗證地址對象的話,在地址對象上加@Valid注解即可級聯(lián)驗證

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

實戰(zhàn)演練

話不多說,直接走實踐路線,同樣使用的是SpringBoot的快速框架,詳細代碼見

github.com/leaJone/mybot

1. @Validated 聲明要檢查的參數(shù)

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

 /**
     * 走參數(shù)校驗注解
     *
     * @param userDTO
     * @return
     */
    @PostMapping("/save/valid")
    public RspDTO save(@RequestBody @Validated UserDTO userDTO) {
        userService.save(userDTO);
        return RspDTO.success();
    }

2. 對參數(shù)的字段進行注解標注


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: 用戶傳輸對象

 */
@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字符,包含文字、字母和數(shù)字")
    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 = "聯(lián)系郵箱不能為空")
    @Email(message = "郵箱格式不對")
    private String email;

    /** 密碼*/
    private String password;

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

}

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

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

  • 為了優(yōu)雅一點,我們將參數(shù)異常,業(yè)務(wù)異常,統(tǒng)一做了一個全局異常,將控制層的異常包裝到我們自定義的異常中
  • 為了優(yōu)雅一點,我們還做了一個統(tǒng)一的結(jié)構(gòu)體,將請求的code,和msg,data一起統(tǒng)一封裝到結(jié)構(gòu)體中,增加了代碼的復(fù)用性

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: 全局異常處理器
 
 */
@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());
    }

    /**
     * 方法參數(shù)校驗
     */
    @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, "數(shù)據(jù)重復(fù),請檢查后提交");
    }


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

4. 測試

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

34_3.png

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

自定義參數(shù)注解

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

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

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

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

    Class<? extends Payload>[] payload() default {};
}

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

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的校驗

有的寶寶說同一個對象要復(fù)用,比如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聲明校驗組

 /**
     * 走參數(shù)校驗注解的 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字符,包含文字、字母和數(shù)字")
    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 = "聯(lián)系郵箱不能為空")
    @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) 的時候,就會出現(xiàn)你在默認沒添加groups = {}的時候的校驗組@Email(message = "郵箱格式不對"),會不去校驗,因為默認的校驗組是groups = {Default.class}.

5.restful風(fēng)格用法

在多個參數(shù)校驗,或者@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<User>().nonAbsent("用戶不存在");
        }
        return new RspDTO<User>().success(user);
    }


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

....圣洛代碼...


總結(jié)

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

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

來源:juejin.im/post/5d3fbeb46fb9a06b317b3c48

到此文章就結(jié)束了。Java架構(gòu)師必看一個集公眾號、小程序、網(wǎng)站(3合1的文章平臺,給您架構(gòu)路上一臂之力,javajgs.com)。如果今天的文章對你在進階架構(gòu)師的路上有新的啟發(fā)和進步,歡迎轉(zhuǎn)發(fā)給更多人。歡迎加入架構(gòu)師社區(qū)技術(shù)交流群,眾多大咖帶你進階架構(gòu)師,在后臺回復(fù)“加群”即可入群。

第25期已結(jié)束!第26期已開始,1月1號截止





這些年小編給你分享過的干貨


1.idea永久激活碼(親測可用)

2.優(yōu)質(zhì)ERP系統(tǒng)帶進銷存財務(wù)生產(chǎn)功能(附源碼)

3.優(yōu)質(zhì)SpringBoot帶工作流管理項目(附源碼)

4.最好用的OA系統(tǒng),拿來即用(附源碼)

5.SBoot+Vue外賣系統(tǒng)前后端都有(附源碼

6.SBoot+Vue可視化大屏拖拽項目(附源碼)


轉(zhuǎn)發(fā)在看就是最大的支持??

瀏覽 67
點贊
評論
收藏
分享

手機掃一掃分享

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

手機掃一掃分享

分享
舉報

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 久久久久麻豆V国产精华液好用吗| 猫咪AV成人永久网站| 思思精品在线| 波多野结衣性爱视频| 国产主播在线播放| 九七影院第二页| 人妻人人妻| 中文字幕视频在线观看| 色婷婷一区二区| 日韩欧美视频在线| 国产区一区| 亚洲色图88| 天天干少妇| 成人性生活一级片| 中文字幕成人电影| 激情综合五月天| 中文字幕免费视频在线观看| 97日韩| 91黄色视频在线播放| 91色色色色| 日逼无码视频| 成人性在线| 一级黄色大毛片| 日本免费爱爱视频| 欧美成人色图| 亚洲欧美日韩久久| 成人AV婷婷| 西西4444大胆无码视频| 操B视频在线播放| 国产精品国产成人国产三级| 影音先锋av资源网站| 狠狠色五月亚洲91| 黄色片无码| 亚洲一区亚洲二区| 欧美日韩一级黄片| 欧美熟女内射| 91亚洲国产成人| 国产精品98| 99久久久无码国产精品性波多| 乱人伦欲国语对白| 久久v| 国产日逼片| a天堂8在线资源| 中文字幕99| 黄色污污污网站| 欧美韩日| 亭亭色| 逼特逼视频在线观看| 日韩黄色一级| a4yy午夜福利| 五月婷婷狠狠爱| 午夜爽爽视频| 一级片在线播放| 久艹视频| 一区二区三区在线免费观看| 91久久精品视频| 亚洲在线无码播放| 黑人中文字幕| 人人操人人摸人人射| 五月伊人婷婷| 开心色婷婷| 日本高清色清di免费观看| 大香蕉在线观看视频| 久久国产免费| 日韩天堂在线| 国产中文字幕在线播放| yw·163.爆乳尤物com| 日日夜夜天天| www.污| 国内老熟妇对白HDXXXX| 精品A区| 精品成人A片久久久久久不卡三区| 人妻无码精品久久人妻成人| 国产中文字幕亚洲综合欧美| 亚洲AV官方网站| 免费爱爱视频| 一区二区三区视频| AV免费激情影院| 大香蕉99| 亚洲无码免费| 你懂的在线视频| 日本欧美久久久久免费播放网| 波多野结衣无码高清| 少妇精品| 日韩性视频| 亚洲色视频| 亚洲天堂无码在线| 中文在线视频| 少妇推油呻吟白浆啪啪成人片 | 亚洲色图欧美在线| 男人的天堂视频在线| 伊人免费视频在线观看| 黄色视频免费在线看| 在线看操逼| 亚洲国产精品久久久久婷婷老年 | 欧美激情在线观看| 五月婷婷六月香| 第四色激情网| 国产精品视频福利| 中文字幕在线精品| 国产AⅤ| 日韩欧美三级| 日韩欧美一级| 初学影院WWWBD英语完整版在线观看| 日韩23岁观看| 一级黄色视频日逼片| 逼逼爱插插网站| 91夜夜夜| 日本少妇高潮喷水XXXXXXX| 午夜一区二区三区免费| 一本色道无码人妻精品| 亚洲黄色在线观看视频| 婷婷伊人中文字幕| 91AV视频在线| 日本成人无码| 丁香六月综合| 国产黄色视频免费在线观看| 成人在线网址| 亚洲无码av在线观看| 国产Av大全| 欧美色图亚洲另类| 少妇搡BBBB搡BBB搡18禁| 日批视频免费观看| 国产99精品视频| 日本人妻在线视频| 欧美丰满美乳XXⅩ高潮www | 91天天操| 先锋AV资源站| 成年女人毛片| 91蜜桃视频在线观看| 成功精品影院| 日韩在线看片| 五月天丁香网| 人人射在线| 2025av天堂网| www.日韩欧美| 天堂网| 国产精品6| 大香蕉久久爱| 精品久久视频| 国产主播在线观看| 日本精品久久| 3D动漫精品啪啪一区二区| 日逼无码视频| 日本免费在线黄色视频| 亚洲AV成人片色在线观看高潮| 日本国产欧美| 成人视频18+在线观看| 国产成人午夜精品无码区久久麻豆 | 无码人妻精品一区| 爱搞搞网| 亚州成人| 影音先锋成人网| 在线观看国产| 亚洲色在线播放| 黄色成人毛片| 日本色情在线| 亚洲免费小电影| 懂色AV成人| 中文在线一区| 亚洲五月天婷婷| 四川少扫搡BBBBB搡B| 伊人导航| 99中文字幕| 欧美国产日韩欧美亚洲国产| 日本一区二区三区四区| 97天天操| 国内精品久久久久久久久久 | 国产午夜精品电影| 精品A片| 一区视频| 色色加勒比综合| 成人免费无码毛片| 国精品无码一区二区三区在线| 日韩欧美高清无码| 午夜视频在线看| 亚洲性片| 国产色视频在线| aⅴ视频| 日韩99| 免费的黄色A片| 91精品国产综合久久久蜜臀粉嫩 | 99热最新国产| 小黄片在线看| 国产精品久久视频| 婷婷亚洲综合| 日韩黄色A级片| 16一17女人毛片| 欧美激情一级| 青青草社区| 欧美成人免费网站| 日本中文字幕无码| 人妻电影亚洲av| 97资源视频| 久久久国产AV| 超碰77| 黄色视频小说| 日韩免费毛片| 一欧美日韩免费/看| 中文原创麻豆传媒md0052| 日韩在线99| 日比视频网站| 日韩精品久久久久久久酒店| 天天摸天天操| 2025最新国产精品每日更新| 日韩一级A| 夜夜骑天天| 国产AV中文| 另类老妇videos另类| 超碰AV在线| 久久91人妻无码精品蜜桃HD| 91女色| 色亭亭影院| 第九色| 国产一级婬片A片| 美国一级A片草草视频| 亚洲天堂美女| 竹菊传媒一区二区三区| A级黄色电影| 亚洲一区中文字幕| 一区性爱| 精品免费一区二区三区四区| 中国老女人性爱视频| 亚洲欧美日韩不卡| 老熟女网站| 91黑人丨人妻丨国产丨| 久久久久久久精| 唐山熟女工棚嗷嗷叫| 人妻少妇偷人精品无码免费| 大香蕉综合伊人| 国产免费观看视频| 亚洲精品娱乐| 少妇一区二区三区| 午夜激情福利| 777三级| 日本欧美在线观看| 亚洲在线免费| 白丝在线观看| 韩日在线视频| 中文字幕免费看| 日韩精品在线免费观看| 国产成人免费观看视频| 蝌蚪窝免费视频| 五月婷婷六月天| 91在线资源| 内射日韩| 一级a免一级a做片免费| 欧美v日韩| 成人无码区免费A片久久鸭| 在线免费高清无码| 欧美日韩国产性爱| 久久久久久亚洲AV无码专区| 北条麻妃99精彩视频| 欧美成人A片AAA片在线播放| 亚洲天堂精品视频| 麻豆91视频| 777性爱| 欧美熟妇搡BBBB搡BBBBB| 美女肏逼| 黄色一区二区三区| 亚洲综合中文字幕在线播放| 国产精品久久久久久久久久久久久| 一级A片60分钟免费看| 中文字幕日日| 粉嫩av一区二区白浆| 久久成人导航| 亚洲天堂在线播放| 激情五月天在线视频| 天天操天天射天天日| 日韩第一页| 91毛片观看| 不卡视频一区| 7777av| 999精品视频在线| 中文无码一区二区三区四区| 在线有区别亚洲| AV一区二区三区| 四虎成人精品永久免费AV九九| www.99av| 91香蕉视频18| 国产suv精品一区二区6精华液| 亚洲成a| 色婷五月天| 日本欧洲三级| 俺去俺来也在线www色情网| 丰滿人妻一区二区三区| 欧美打炮网| 1000部毛片A片免费视频| 国产一级a毛一级a毛观看视频网站| 五月天综合网| 亚洲无码在线观看网站| 亚洲VA| 国产黄色不卡| 国产亚洲精品成人a| 久久精品国产99精品国产亚洲性色 | 色天天综合网| 亚洲AⅤ欧美AⅤ| 免费人成视频在线| 久操免费在线视频| 久久人妻无码中文字幕系列| 美日韩无码视频| 在线中文av| 91麻豆精品91久久久久同性| 国产成人精品一区| 玉米地一级婬片A片| 中字幕视频在线永久在线观看免费 | 奇米影视狠狠干| 伊人成人在线视频| 人妻少妇综合| 亚洲另类色图| 免费AV网站观看| 水果派解说av| 免费黄色在线视频| 欧美第一视频| 亚洲无码一本道| 伊人春色网| 亚洲A片电影| 天天干天天撸| 最新中文字幕无码| 国精产品久拍自产在线网站| 久久久久久久久久国产精品免费观看-百度 | 91人妻无码成人精品一区二区| 三级网址大全| 午夜福利视频91| 青娱乐亚洲| 91香蕉视频免费| h片免费观看| 你懂的在线视频观看| 北条麻妃在线视频聊天| 操逼毛片| 国产一级AV免费观看| 91精品久久香蕉国产线看观看| 国产人妻人伦精品1国产丝袜| 国产在线观看免费| 日韩码线观看视频| 91香蕉国产视频| 一本色道久久加勒比精品| 亚洲婷婷精品国产成人| 天天色情| 天天爽天天| 丁香社区五月天| 91熟女视频| 超碰牛牛| 内射少妇18| 欧美日韩肏屄视频| 亚洲免费中文字幕| 久久久久亚洲AV成人片乱码| 中文字幕不卡无码| 久久激情国产| 午夜啊啊啊| 一区二区三区四区五区六区高清无吗视频 | 欧美日韩中文字幕无码| H网站在线观看| 国产黄色在线视频| 日韩一| 欧美黄色影院| 大香蕉做爱视频| 日本无码一区二区三区| 国精品无码人妻一区二区三区| 久久久国产91桃色一区二区三区| 水果派红桃AV解说| 国产一区二区视频在线观看| 性欧美xxxx| 麻豆视频在线| 安微妇搡BBBB搡BBBB日| 国产精品久久久久久久久久九秃 | 91性爱视频在线观看| 大香蕉毛片| 香蕉成人网站| 精品无码视频| 超碰97在线精品国产| 日韩在线免费| 亚洲高清视频免费| 成人激情视频| 欧美伊人在线| 综合影院| 成人片无码| 亚洲精品无码人妻| 日韩毛片中文字幕| 亚洲欧美在线一区| 北条麻妃网站| 中文√在线天堂8| H片在线免费观看| 色片免费| 一级a片免费看| 超碰福利导航| 女人操逼视频| 亚洲免费观看高清完整版| 大香蕉伊人在线手机网| 看一级黄色片| 国产一区免费观看| 国产精品成人无码a无码| 91AV一区二区三区| 99久久婷婷国产综合精品hsex,亚| 精品视频免费在线| 免费看黄色大片| 人人爽爽| 日韩在线| 久久久久久久大香蕉| 北条麻妃精品青青久久价格| www.91在线| 噜噜噜AV| 蜜桃av秘无码一区二区三区| 色国产在线视频| 亚洲色吧| 天天操网址| 国产婷婷五月天| 欧美sese| 国产1级a毛a毛1级a毛1级| 一级性爱视频| 亚洲人妻在线播放| 3d动漫一区二区| 91人人人| www.97cao| 亚洲电影在线观看| 久久大鸡巴| 丁香五月天在线播放| 精品免费国产一区二区三区四区| 欧美色图视频在线观看| 日本色色| 成年人黄色视频网站| 欧美国产日韩另类| 激情国产视频| 香蕉视频a| 特级特黄AAAAAAAA片| 老师搡BBBB搡BBB| 国产欧美一区二区人妻喷水| 国产精品99久久久久久成人| 大香蕉99热| 欧美77777| 男女av免费| 午夜亚洲福利视频| 中文字幕AV播放| 国产精品国产三级国产| 亚洲人成电影| 视频一区18| 日韩国产综合| 国产做受91一片二片老头| 欧美在线中文| 夜夜狠狠躁日日| V天堂在线| 97成人在线视频| 国产精品天天AVJ精麻传媒| 青青青草视频在线观看| 欧美系列在线| 人妻少妇精品| 高潮AV在线观看| 天天拍夜夜爽| 天天干天天操天天射| 天天日天天摸| 一区二区三区小视频| 特黄毛片| 日韩欧美成人在线观看| 成人蜜臀AV| 免费观看av| 中文字幕在线观看二区| 免费日本A片| 91小宝寻花一区二区三区三级| 一级免费片| 亚洲黄色视频免费| 亚洲区视频| 草莓av| 国产一级电影网站| 日韩色情片| 日本在线黄色视频| 91久久精品一区二区三区| av在线无码| 国产三级在线免费观看| 中文无码高清在线| 婷婷三区| 9999国产精品| 色噜噜狠狠一区二区三区| 激情丁香五月| 亚洲无码人妻| 波多野结衣无码一区| 天堂亚洲AV无码精品成人| 大鸡吧视频在线观看| 成人午夜天堂| 亚洲一级免费在线观看| 国产在线资源| 一级特黄录像免费播放下载软件| 欧美A片在线免费观看| 88av在线| 无码骚逼| 欧美成人手机在线观看| 女人特级毛片18| 国产成人A| 色老板最新地址| 黄色美女毛片| 手机看片福利| 国产精品tv| 五月大香蕉| 亚洲视频网址| 美女被操网站| 波多野结衣国产| 久久婷婷网站| 天天噜天天操| 91成人亚洲| 天天想夜夜操| 久久久久黄片| 成人欧美一区二区三区白人| 碰碰视频| 亚洲成人大香蕉| 91原创国产内射| 日韩在线观看AV| 欧美日韩免费看| 精品视频第一页| 91亚洲国产成人精品一区二区三| 天天插在线视频| 最近最好的2019中文| 中文字幕第10页| 国精品无码人妻一区二区三区| 大鸡巴日| 色女人天堂| 国产日韩欧美一区| 国产欧美日韩在线播放| 伊人综合色| 狼友视频在线观看| 国产成人无码在线| 超碰伊人大香蕉| 亚洲AV永久无码精品国产精| 天美果冻麻豆国产一区| 国产一区二区三区免费播放| 亚洲天堂男人的天堂| 亚洲无码在线精品| 三级理论片| 香蕉伊人网| 俺去俺来也www色官网cms| 精产国品一区二区三区| 日皮视频在线观看免费| 亚洲天媒在线播放| 天天看天天射| 浮力影院欧美| 天天天天天天天操| 天天干夜夜操| 日本50路熟女| 欧美日韩国产一区| 国产一级A片免费视频| 色综合婷婷| 婷婷日韩在线| 色天使色天堂| 看操逼视频| 日韩欧美精品在线观看| 新版欧美内射大全| av東熱激情东京热| 麻豆少妇| 欧美九九| 成人电影久久| 乱伦网址| 要操逼网| 国产精品V日韩精品V在线观看 | 亚洲超碰在线| 婷婷五月无码| 欧美日韩第一区| 亚洲人成高清| 韩国日本美国免费毛片| 先锋影音在线资源| 91精品导航| 翔田千里50岁无码| 亚洲黄色Av| 欧美成人在线免费| 国产操逼免费看| 韩国AV在线| 日本中文字幕在线视频| 性欧美69| 一级爱爱爱| 米奇狠狠干| 色婷婷欧美| 黄片高清免费观看| 狠狠狠狠狠| 日韩一级无码视频| 不卡的av在线| 不卡无线在一区| 国产女人在线视频| 亚洲色伦| 天堂vs亚洲| 大香蕉久久| 高潮喷水在线观看| 国产精品色色| 精品91视频| 精品无码人妻一区二区三区| 色综合久久88色综合| 91国产免费视频| 国产老熟女高潮毛片A片仙踪林| 亚洲AV无码乱码| 国产精品久久视频| 人妻久久久| 乱子伦国产精品一区二区| 日韩爆乳一区二区三区| 综合伊人大香蕉| 日本视频在线免费| 在线观看免费视频无码| 国产成人AV免费观看| 在线观看黄| 久草综合在线| 国精品伦一区一区三区有限公司| 黄色视频小说| 五月天丁香网| av影片在线播放| 国产亚洲精品午夜福利巨大软件| 91亚瑟视频| av资源播放| 免费看一级高潮毛片| 999日本不卡影院| 五月丁香网站| 插吧插吧网| 国产美女自拍视频| 婷婷五月天国产| xxxxx日韩| 亚洲午夜精品久久久| 成人福利视频在线观看| 欧美精品不卡| 国产无码自拍偷拍| 国产伦理一区| 欧美性爱在线网站| 一级a片在线免费观看| 亚洲成人一区二区在线观看| 久久久三级片| 亚洲欧洲在线视频| 日韩操b| 午夜看片| 色色毛片| 麻豆二区| 精品国产精品| 99精品在线观看视频| 亚洲中文字幕在| 尹人在线视频| www高清无码| 黄片国产| 九九热视频99| 伊人伊人网| 中文字幕乱码视频| 18性XXXXX性猛交| 欧美精品在线免费观看| 人妻少妇视频| 免费A视频| 亚洲操片| 97人人爽人人爽人人人| 欧美日韩中文字幕| 韩日无码视频| 一级a一级a爱片免费免免高潮| 风流少妇一区二区三区91| 波多野结衣一区二区三区在线观看| 国产午夜精品一区二区| 91精品无码一区二区| 久久伊人综合| 日韩AV乱伦| 激情久久AV一区AV二区AV三区 | 91亚洲精品乱码久久久久久蜜桃| 能看的AV网站| 亚洲黄色视频在线| 成人三级毛片| 欧美日韩国产成人在线| 日本无码在线视频| 国产69页| 国产精品成人在线观看| 69视频免费观看| 一级黄色片免费| 国产精品无码ThePorn| 色综合激情| 西西444WWW无码精品| 亚洲无码一二三| 久操视频在线观看免费| 欧洲精品视频在线观看| 小h片| 日本大香蕉伊人| 亚洲精品乱码久久久久久| 婷婷狠狠操| 波多野结衣亚洲视频| 亚洲性爱在线播放| 俺也去大香蕉| 北条麻妃在线一区| 影音先锋天堂网| www四虎com| 成人亚洲视频| 亚洲三级视频在线观看| 亚洲啪啪| 淫揉BBB揉揉揉BBBBB| 色男人色天堂| 69AV在线观看| 无码一级片| 无码视频免费| 亚洲视频一区| 一区二区三区精品婷婷| 无套免费视频欧美| 做爱视频毛片人乱| 美女少妇激情BBBB| 婷婷中文| 欧美AAAAAAAA| 日本免费版网站nba| www444www| 神马午夜视频| 内射免费网站| 成人1区| 精品乱子伦一区二区三区免费播放| 丰滿人妻一区二区三区| 欧美性猛交XXXX乱大交蜜桃| 五月婷婷av| 日本在线| 成人福利视频| 免费在线观看中文字幕| av天堂手机网| AAA亚洲| 日韩不卡av| 熟女少妇一区二区| 男女无套在线观看免费| www.日本黄色视频| 拍真实国产伦偷精品| 欧美一级免费观看| 四虎884| 黑人毛片| 国产成人亚洲日韩| 天天干天天摸| a色视频| 中文字幕日韩无码电影| 色色五月天视频| 亚洲一级二级三级| 国产黄色自拍| 久草综合视频| 制服.丝袜.亚洲.中文.豆花| 免费黄片视频在线观看| 成人小视频十八禁免费观看| 九九A片| 久久视频免费| 日韩成人影视| 国产欧美日韩一区二区三区| 日产无码| 99热自拍| 五月丁香五月婷婷| 岛国av免费| 免费AV片| 欧美、日韩、中文、制服、人妻| 爽好紧别夹喷水欧美| 国精产品一区一区三区四区| 久久无码影院| 高清无码视频在线| 欧美熟妇高潮流白浆| 亚洲aⅤ| 国产三级片精品| 欧美亚洲日本| 欧美青青草| 日韩精品不卡| 亚洲欧美另类在线| 成人黄色免费| gogogo高清在线完整免费播放韩国 | 天天激情| 91在线观看| 91天天综合在线| 欧美日韩亚洲另类| 欧美日韩视频在线| 色香蕉视频在线观看| 吴梦梦一区二区在线观看| 91人人妻人人| 五月丁香色播| 美女啪啪网站| 欧美日韩第一页| 玩弄大荫蒂视频| 水果派解说在线观看| 一级AAAAA片裸体做受| 国产足交| 四川少妇搡BBw搡BBBB搡| 无码少妇视频| 欧美成人综合一区| 日韩无码一级| 激情操逼| 正在播放吴梦梦淫行| 国产精品扒开腿| 黑人一区二区三区四区| 成人免费视频国产在线观看| 亚洲V国产v欧美v久久久久久 | 亚洲久久久久久| 久热无码| 一级无码专区| 精品少妇无码视频| 成人免费乱码大片a毛片蜜芽 | 国产一级a毛片| 一本久道无码| 天天日天天摸| 国产成人免费观看| 久久久亚洲熟妇熟女| 999久久久精品| 国产无遮挡又黄又爽又色学生软件| 蜜桃传媒视频| 另类老妇性bbwbbwbbw| 日韩精品三级片| 日本中文字幕中文翻译歌词| 免费无码婬片A片AA片| 亚洲黄色在线视频| 日本黄色色情视频| 五月婷婷色| 人人艹人人| 国产操逼网址| 国产午夜福利视频| 午夜啊啊啊| 操逼123首页| 一级片黑人| 国产成人久久777777| 岛国AV片| 国产深夜福利| 亚洲无码二区| 欧美A级黄片| 老鸭窝成人视频| 91足浴店按摩漂亮少妇| 91豆花视频| 亚洲色图p| 国产a片免费观看| 久久草在线播放| 天天干天天拍| 中文字幕乱伦性爱| 微拍福利一区二区| 国产嫩草视频| 大香蕉精品在线视频| 国产骚妇| 免费成人国产| 青娱乐| 欧美午夜精品成人片在线播放 | 欧美一区二区在线观看| 男人日女人视频| 天天视频亚洲| 亚洲一级黄色电影| 北条麻妃精品| 欧美成人性爱在线| 蝌蚪九色啦403| 欧美精品秘一区二区三区蜜臀 | 国产熟妇| av午夜福利| 青青草伊人大香蕉| 一区二区三区四区日韩| 亚洲一级黄色片| 亚洲免费中文字幕| 亚洲黄色视频免费看| 青草99| 2019中文字幕mv第三季歌词 | 久久先锋| 在线观看免费高清无码| 丁香六月操| 国产麻豆视频| 亚洲中文免费| 免费国产三级片| 自拍偷拍在线视频| 成人性爱福利视频| 黄色视频在线观看地址| 亚洲国产天堂| 香蕉成人网| 97人妻一区二区精品免费视频| 日木毛片| 黄色片无码| 成人香蕉| 国精品无码人妻一区二区三区免费| 国产精品成人AV片| 国产AV日韩AV| 久久久久久97| 大肉大捧一进一出免费阅读| 超碰超爽| 欧美肏屄视频| 香蕉成人A片视频| 淫揉BBB揉揉揉BBBBB| 欧美国产成人在线| 国产成人主播| 天天日夜夜艹| 性感成人在线| 草草影院第一页YYCCC| 91超碰免费| 一区二区三区四区在线| 高清无码视频免费版本在线观看| 豆花av在线| 一区精品| 欧美亚洲日韩一区| 亚洲区成人777777精品| 西西4444WWW无码视频| 日日操天天操| 国产迷奸视频| 无码成人AV在线看免费| 亚洲人妖在线| 91麻豆精品国产91久久久吃药 | 黄色a片网站| 亚洲成人在线无码| 国产午夜视频在线观看| 色色在线观看| 国产一区二区三区在线观看免费视频免费视频免费视频 | A级无码| 亚洲无码av在线播放| 久久久久久亚洲AV无码专区| 北条麻妃在线播放一区| 国产精品日韩高清北条麻衣| 日本不卡中文字幕| 中文字幕乱码视频32| 亚洲国产成人在线视频| 岛国免费av| 一级a片在线| 欧美大骚逼| 免费看一区二区三区A片| 日韩免费性爱视频| 黄色小说视频网站| 亚洲黄色av| 国产麻豆传媒| 亚洲无码av在线播放| 日韩一区欧美| 91亚洲国产成人久久精品麻豆| 精品人妻中文字幕|