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

真的!這么寫參數(shù)校驗(yàn) (Validator) 就不會(huì)被勸退了。。。

共 19361字,需瀏覽 39分鐘

 ·

2021-06-27 13:40

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

為什么要用validator

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

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

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

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

        //手動(dòng)逐個(gè) 參數(shù)校驗(yàn)~ 寫法
        if (StringUtils.isBlank(mobile)) {
            return RspDTO.paramFail("mobile:手機(jī)號(hào)碼不能為空");
        } else if (!Pattern.matches("^[1][3,4,5,6,7,8,9][0-9]{9}$", mobile)) {
            return RspDTO.paramFail("mobile:手機(jī)號(hào)碼格式不對(duì)");
        }

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

        // 比如寫一個(gè)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();
    }

這被大佬看見(jiàn),一定說(shuō),都9102了還這么寫,然后被勸退了.....

  1. 什么是javax.validation

JSR303 是一套JavaBean參數(shù)校驗(yàn)的標(biāo)準(zhǔn),它定義了很多常用的校驗(yàn)注解,我們可以直接將這些注解加在我們JavaBean的屬性上面(面向注解編程的時(shí)代),就可以在需要校驗(yàn)的時(shí)候進(jìn)行校驗(yàn)了,在SpringBoot中已經(jīng)包含在starter-web中,再其他項(xiàng)目中可以引用依賴,并自行調(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>

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

此處只列出Hibernate Validator提供的大部分驗(yàn)證約束注解,請(qǐng)參考hibernate validator官方文檔了解其他驗(yàn)證約束注解和進(jìn)行自定義的驗(yàn)證約束注解定義。

實(shí)戰(zhàn)演練

話不多說(shuō),直接走實(shí)踐路線,同樣使用的是SpringBoot的快速框架,詳細(xì)代碼見(jiàn):github.com/leaJone/myb…

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

這里我們?cè)诳刂破鲗舆M(jìn)行注解聲明

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

2. 對(duì)參數(shù)的字段進(jìn)行注解標(biāo)注

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: 用戶傳輸對(duì)象
 * @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 = "用戶名不能超過(guò)20個(gè)字符")
    @Pattern(regexp = "^[\\u4E00-\\u9FA5A-Za-z0-9\\*]*$", message = "用戶昵稱限制:最多20字符,包含文字、字母和數(shù)字")
    private String username;

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

    /**性別*/
    private String sex;

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

    /** 密碼*/
    private String password;

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

}

3. 在全局校驗(yàn)中增加校驗(yàn)異常

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

  • 為了優(yōu)雅一點(diǎn),我們將參數(shù)異常,業(yè)務(wù)異常,統(tǒng)一做了一個(gè)全局異常,將控制層的異常包裝到我們自定義的異常中
  • 為了優(yōu)雅一點(diǎn),我們還做了一個(gè)統(tǒng)一的結(jié)構(gòu)體,將請(qǐng)求的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: 全局異常處理器
 * @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());
    }

    /**
     * 方法參數(shù)校驗(yàn)
     */
    @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, "路徑不存在,請(qǐng)檢查路徑是否正確");
    }

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


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

4. 測(cè)試

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


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

自定義參數(shù)注解

1. 比如我們來(lái)個(gè) 自定義身份證校驗(yàn) 注解

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

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

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

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

這個(gè)注解是作用在Field字段上,運(yùn)行時(shí)生效,觸發(fā)的是IdentityCardNumber這個(gè)驗(yàn)證類。

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

2. 然后自定義Validator

這個(gè)是真正進(jìn)行驗(yàn)證的邏輯代碼:

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在項(xiàng)目源碼中,可自行查看

3. 使用自定義的注解

    @NotBlank(message = "身份證號(hào)不能為空")
    @IdentityCardNumber(message = "身份證信息有誤,請(qǐng)核對(duì)后提交")
    private String clientCardNo;

4.使用groups的校驗(yàn)

有的寶寶說(shuō)同一個(gè)對(duì)象要復(fù)用,比如UserDTO在更新時(shí)候要校驗(yàn)userId,在保存的時(shí)候不需要校驗(yàn)userId,在兩種情況下都要校驗(yàn)username,那就用上groups了:

先定義groups的分組接口CreateUpdate

import javax.validation.groups.Default;

public interface Create extends Default {
}

import javax.validation.groups.Default;

public interface Update extends Default{
}

再在需要校驗(yàn)的地方@Validated聲明校驗(yàn)組

 /**
     * 走參數(shù)校驗(yàn)注解的 groups 組合校驗(yàn)
     *
     * @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 = "用戶名不能超過(guò)20個(gè)字符", groups = {Create.class, Update.class})
    @Pattern(regexp = "^[\\u4E00-\\u9FA5A-Za-z0-9\\*]*$", message = "用戶昵稱限制:最多20字符,包含文字、字母和數(shù)字")
    private String username;

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

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

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

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

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

}

注意:在聲明分組的時(shí)候盡量加上 extend javax.validation.groups.Default否則,在你聲明@Validated(Update.class)的時(shí)候,就會(huì)出現(xiàn)你在默認(rèn)沒(méi)添加groups = {}的時(shí)候的校驗(yàn)組@Email(message = "郵箱格式不對(duì)"),會(huì)不去校驗(yàn),因?yàn)槟J(rèn)的校驗(yàn)組是groups = {Default.class}.

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

在多個(gè)參數(shù)校驗(yàn),或者@RequestParam 形式時(shí)候,需要在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é)

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

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

來(lái)源:juejin.im/post/5d3fbeb46fb9a06b317b3c48

推薦閱讀:

世界的真實(shí)格局分析,地球人類社會(huì)底層運(yùn)行原理

企業(yè)IT技術(shù)架構(gòu)規(guī)劃方案

論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?

企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!

【中臺(tái)實(shí)踐】華為大數(shù)據(jù)中臺(tái)架構(gòu)分享.pdf

華為的數(shù)字化轉(zhuǎn)型方法論

華為如何實(shí)施數(shù)字化轉(zhuǎn)型(附PPT)

超詳細(xì)280頁(yè)Docker實(shí)戰(zhàn)文檔!開放下載

華為大數(shù)據(jù)解決方案(PPT)

瀏覽 87
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 国产无套免费网站69| 人妻视频网站| 成人免费毛片蓝莓| 在线免费观看视频黄| 男人的天堂一区| 欧美99在线| 91干穴穴在线观看| 成人午夜精品| www.超碰在线| www.黄色片| 91人人操人人爽| 精品欧美成人片在线| 黄色高清视频在线观看| 涩久久久| 蜜臀AV一区二区三区免费看| 狠狠狠狠狠| 日韩一级欧美一级| 91中文字幕+乱码| 日韩在线视频第一页| 免费无码婬片A片AA片| 老鸭窝av免费入口在线观看| 丁香五月天堂网| 精品AV| 欧美日韩日逼| 蜜桃视频一区二区三区四区使用方法 | 日韩无码内射| 欧美性猛交XXXX乱大交HD| 亚洲在线一区二区| 国产无码一二三区| 996精品在线| 天堂在线视频免费| 国产免费一区二区三区网站免费 | 国产乱伦网站| 亚洲精品久久久久久| 成人乱无码AV在线观看| 91精品视频网站| 桃色五月天| 国产高清A片| 操逼爽| 亚洲一区高清| 亚洲无码在线精品| 久久精品99国产国产精| 一本色道久久综合狠狠| 狠狠大香蕉| 男人天堂99| 中国老太卖婬HD播放| 欧美黄网站| 天天天天天天干| 一区二区黄色| 日本中文字幕电影| 亚洲精品在线观看视频| 欧美AAA视频| 亚洲第一免费视频| 国产成人视频免费观看| 2025av天堂网| 三级片网站视频| 欧美男人的天堂| 中文字幕一区二区三区日本在线 | 色人天堂| 国产精品色综合| 午夜老司机福利一二三区| 日韩欧美中文字幕视频| 欧美精品在线免费观看| 91精品国产综合久久久蜜臀粉嫩 | 欧美毛片在线观看| 99在线看| 亚洲黄色成人| 69国产精品成人无码视频色| 久久综合伊人777777| 久久私人影院| 色屁屁草草影院ccyycom| 人人鲁人人操| 码人妻免费视频| 国产理论片在线观看| 人人做人人做人人做,人人做全句下一 | 91大长腿美女花外围在线观看| 青草中文娱乐网在线| 欧美日日| 伊人久久综合| 亚洲第一中文字幕网| 日AV在线无| 大鸡巴黄色视频免费观看| 婷婷激情五月| 久久精品大屁股| 淫秽视频免费看| 欧美亚洲综合手机在线| 日韩人妻无码一区二区三区中文 | Www.黄色| 亚洲综合一区二区三区| 免费看黄色毛片| 少妇做爱特级AAA| 你懂得在线视频| 97人妻精品一区二区三区免| 久久久波多野结衣| 草逼动态图| 性九九九九九九| A片网站在线观看| 91狠狠色丁香婷婷综合久久精品| 天堂俺去俺来也www久久婷婷| 国产三级片精品| 国产伦精一品二品三品app| 大香蕉超碰在线| 伊人成人大香蕉| 69式荫蒂被添全过程频| 国产va在线观看| 人妻互换一二三区免费| 国产强伦轩免费视频在线| 欧美激情一区| 欧美一级视频| av不卡免费观看| 国产在线观看97| 一牛影视精品av| 无码欧美精品一区二区| 中文字幕免费av| 日韩在线中文字幕| 一级免费黄色视频| AV网站免费在线观看| 久久午夜电影| 久草超碰在线| 黄色片在线免费看| 亚洲女人被黑人巨大的原因| 辽宁模特张雪馨视频最新| 天天天天毛片| 伊人久久大香蕉视频| 欧美日韩国产成人在线观看| 成人在线黄片| 91网站在线播放| 91人妻人人澡人人爽人妻| 精品孕妇孕交无码专区| 一级无码高清| 免费一级无码婬片A片APP直播| 国产激情视频在线观看| 91视频在线观看| 996视频| 中字幕视频在线永久在线观看免费| 亚洲色伦| 亚洲狼人综合网| 国产精品久久久久久久久久久久久久久 | 亚洲无码AV麻豆| 黄色A片网| 国产A片一区| 97爱爱网| 欧美伊人在线| 午夜久久久| а√最新版天堂中文在线| 97无码人妻| 成年人在线观看视频| 中文字幕黑人无码| 欧美性爱a视频| 亚洲精品高清视频| 亚洲免费成人网| 精品无码人妻一区二区| 人成在线免费视频| 男女爱爱动态图| 中文字幕日本欧美| 91AV在线观看视频| 日韩一级毛| 777.av| 国产欧美综合一区二区三区| 探花av| 黄色大片AV在线| 黄色九九| 天堂网一区二区三区| 天天干妹子| 国产精品在线观看视频| 久久久噜噜噜久久中文字幕色伊伊| 亚洲影音| 日本伊人网| 日皮视频| 久热精品在线观看视频| 猛男大粗猛爽H男人味| 国产在线第一页| 91国黄色毛片在线观看| 欧美午夜精品久久久久免费视| 黄色A级视频| 日韩91在线| 中文字幕第二页| 亚洲v| 六月婷婷在线观看| 婷婷深爱激情| 一级A片免费| 大香蕉伊人影院| 日本无码一区二区三三| 老司机无码| 特级西西WWW无码| 四虎黄色影院| 中国字幕在线观看韩国电影| 日韩99| 日韩无码破解| 成人黄网站免费视频| 国产办公室丝袜人妖| 在线观看黄色av| 丁香婷婷一区二区三区| 日韩成人视频在线观看| 亚洲成人中文字幕在线| 免费观看黄色AV| 国产美女一级真毛片酒店| 残忍另类BBWBBWBBW| 99在线精品视频| 亚洲小电影在线观看| 岛国AV免费在线| 欧美高清无码视频| 丁香五月激情视频| 91操美女视频| 久草大香蕉视频| 自拍偷拍av| 成人免费无码婬片在线观看免费| 韩剧《邻居的妻子》电视剧| 精品爆乳| AV福利在线| 高清av无码| 爱爱帝国综合社区| 蜜桃久久精品成人无码AV| av网站在线免费观看| 丁香五月激情网| 国产激情欧洲在线观看一区二区三区| 特黄特色免费视频| 牛牛精品一区二区| 在线一区二区三区四区| 狠狠躁日日躁夜夜躁A片视频| 久草综合网| 亚欧成人网站| 日韩无码国产精品| 成人国产精品秘欧美高清| 国产精品无码免费| 天美精东蜜桃91| 亚洲www| 毛片A片免费看| 亚洲www在线| 精品国产无码怀孕| 牛牛精品一区二区AV| 综合色色婷婷| 天美精东蜜桃91| 国产探花视频在线免费观看 | 狠狠躁日日躁夜夜躁A片小说免费| 国产精品美女毛片真酒店| 精品国产免费观看久久久_久久天天| 色草视频| 337p西西人体大胆瓣开下部| av黄色| 一级片操逼| 69er小视频| 亚洲永久| 色丁香在线| 五月丁香激情综合| 成人黄色电影在线观看| 国产AV美女| 成年人免费视频在线观看| 特极西西444WWW大胆无码| 高清无码免费在线视频| 亚洲中文字幕在线视频播放| 欧美色图另类| 屁屁影院国产第一页| 婷婷色中文网| 97视频在线免费观看| 午夜福利干B在线免费小视频| 一区免费在线观看| 精品成人A片久久久久久不卡三区 免费看成人A片无码照片88hⅤ | 天天日狠狠操| 天堂精品| 亚洲日韩在线a成| 日皮在线观看| 91在线精品秘一区二区黄瓜| www.一级片| 最新三级网站| 人妻无码| 天天爽夜夜爽夜夜爽精品| 狠狠视频| 亚洲日韩国产AV| 成人欧美精品| 久久久精品国产| 手机看片福利视频| 国产日韩一区二区| 亚洲一级黄色电影| 国产精品国产三级囯产普通话2| 亚洲高清无码在线播放| 久久人精品| 亚洲无码高清在线视频| 污网址| 52妺嘿嘿午夜福利在线| 国产做受91一片二片老头| 九九成人| 中文字幕乱伦视频| 亚洲免费视频播放| 99精品视频北条麻妃国产版 | 就爱操逼网| 香蕉视频毛片| 亚洲在线免费视频| 日本免费在线黄色视频| 黄色三级毛片| 久久99久久视频| 亚洲一区二区在线播放| 日本18禁网站| 精品国精品自拍自在线| 无码黄| 欧美aaaaaa| 婷婷久久婷婷| 欧美成人A片| 精品人妻一区二区免费蜜桃| 久久波多野结衣| 久久亚洲影视| 欧美极品视频| 夜夜骚| 免费三级毛片| 亚洲AV无码乱码精品| 欧美亚洲视频在线观看| 日韩二区三区| 伊人日逼| 日韩va中文字幕无码免费| www.久久网| 黄色大片免费在线观看| 2025四虎在线视频观看| 一级电影视频去去去| 日韩视频第一页| 日韩一级在线免费观看| 无码AV一区二区| 精品久久三级片| 尤物视频在线| 91久久久裸身美女| 波多野结衣久久中文字幕| 中文字幕观看| 在线观看国产小视频| 麻豆乱婬一区二区三区| 欧美乱伦内射| 嫩草视频| 国精产品一二三区| 中文字幕1区| 婷婷丁香五月网| 欧美成人一级A片| 大香蕉啪啪啪啪| 亚洲成人精品在线| AV1区二区| 999一区二区三区| 美女做爱在线观看| 91抽插| 亚洲综合免费观看高清完整版在线| 国产在线A片| 一区在线观看| 久久婷婷国产综合| 超碰人人在线| 三级成人在线| 国产精品色综合| 青青草视频偷拍| 久久免费视频观看| 国产精品探花熟女| 青春草在线观看国产| 秋霞91| AA丁香综合激情| 青青草av| 国产高清无码免费视频| 亚洲五月天婷婷| 男人的天堂av网站| 97精品人人妻人人| 国产51视频| 日韩欧美成人视频| 精品人妻一区二区三区日产乱码 | 少妇大战28厘米黑人| 自拍天堂| 插进去综合网| 久久婷婷婬片A片AAA| 色婷婷视频在线观看| 久久成人网豆花视频| 亚洲综合区| 在线观看黄视频| av福利电影在线| 水果派中文解说AⅤ| 国产欧美二区综合中文字幕精品一| 亚洲一级免费视频| 日本黄色精品| 激情综合五月| 99精品9| 国模精品无码一区二区免费蜜桃| h视频免费看| 91视频网站在线观看| 狠狠干天天操| 高清无码在线视频| 精品五月天| 逼特逼视频网站| 亚洲性爱影院| 操逼操逼操逼操逼操逼操逼| 91中文在线| 大鸡吧操视频| 自拍偷拍第一页| yw视频在线观看| 亚洲图片激情乱伦小说| 美女操逼网站| 刘玥精品A片在线观看| 男女视频网站| 欧美AA级毛片| 黄片视频大全| 一级特黄录像免费播放下载软件| 亚洲精品成人片在线观看精品字幕 | 国产亚洲欧美日韩高清| 久久亚洲天堂| 中文字幕在线免费观看电影| 免费高清无码| 一级一A片一a免费看| 日韩成人无码特集| 丁香五月婷婷色| 激情无码在线观看| 三级视频在线观看| 色婷婷影音| 波多野结衣被操| 一级A爱爱| 国产1级a毛a毛1级a毛1级| 四川少妇BBw搡BBBB槡BBBB| 国产免费av片| 伊人性视频| 国产1页| 丰满人妻| 成人在线乱码视频| 黄色一级免费电影| 免费无码婬片AAAAA片| 久久五月婷| 一级午夜福利| 五月丁香六月情| 西西西444www无码视| 波多野结衣AV在线观看| 一区二区三区国产| 国产精品免费一区二区三区都可以| 久草精品在线| 日本中文字幕无码| 香蕉视频成人在线| 国产在线观看自拍| 熟女人妻人妻の视频| 成人免费黄色网| 亚洲日本三级片| 国产欧美成人| 日本久久成人| av中文在线| 国产AV大片| 777米奇视频| 国产精品一级| 亚洲日韩免费观看| av啊啊| 亚洲日韩中文字幕在线观看| 俺来操| 麻豆911精一区二区| 国产精品无码怀孕软件| 国产成人精品一区二| 精品国产午夜福利| 91探花足浴店少妇在线| 无码在线网站| 伊人色色| 一级片免费| 亚洲操操| 久久免费看| 黄色成人网站在线观看| 亚洲成人AV在线播放| 北条麻妃中文字幕旡码| 在线观看一区| 无码人妻系列| 日本国产欧美| 搡BBBB搡BBB搡五十粉嫩 | 一区二区免费视频| 国产精品国产精品国产专区不| 在线观看日韩精品| 少妇被躁到高潮无码| 天天舔天天日| 国产性色AV| 自拍第一页| 亚洲AV成人片无码网站网蜜柚 | www.sese| AV网站在线免费观看| 久久六六| 9久热| 欧美日逼网站| eeuss久久| 少妇456| 五月天福利视频| 男人的天堂免费视频| 欧美熟女一区| 亚洲女人被黑人巨大的原因| 天天插天天狠天天透| 伊人大香蕉视频在线观看| 日韩免费在线视频观看| 久久伊人影院| 精品一区二区三区视频| 麻豆www| 三洞齐开Av在线免费观看| 女生自慰网站在线观看| 亚洲男人的天堂网| 青青草原视频在线免费观看| 欧美黄色片| 人妻久久久| 黄色视频免费在线观看网站| 天堂在线观看AV| 亚洲影音| 国产性爱在线视频| 玖玖在线播放| 16一17女人毛片| 人人操在线| 亚洲AV资源| 亚洲中文字幕2019| 91偷拍与自偷拍精品无码| 天天干天天干| 懂色av,蜜臀AV粉嫩av| 国产成人午夜精品无码区久久麻豆| 亚洲日韩在线视频播放| 欧美三级在线| 乌克兰毛片| 九一香蕉视频| 天天日av| 很色很黄的A片一| 视频一区中文字幕| 性爱福利视频| 欧美综合亚洲| 亚洲内射无码| 中文字幕永久在线5| 国产一级特黄A片| 中文字幕无码日韩| 成人不卡在线| 亚洲视频在线观看播放| 国产熟妇码视频黑料| 91免费福利| 亚州天堂网| 国产成人精品免高潮在线观看| 91东热激情| 北条麻妃久久| 六月婷婷久久| 天天日狠狠操| 欧美亚洲国产一区二区三区| 做爱网站在线观看| 国产欧美在线观看| 亚洲国产精品久久人人爱| 日本中文在线观看| 无码人妻蜜桃| 丁香花在线高清完整版视频| 18禁黄网站| 国产又粗又长的视频| 欧美国产日韩在线观看| jizz免费在线观看| 青青草视频免费在线观看| 亚洲小说图片AV在线| 91蜜桃在线| 黄色一及片| 国产三级片无码| 欧美一区二区三区系列电影| 亚洲AV无码日韩AV无码导航| a片在线免费观看| 国产一级a毛一级a毛视频在线网站 | 日本少妇黄色视频| 午夜A片| 人人妻人人爽人人澡人人精品| 亚洲在线高清| 亚洲天堂影音先锋| 啊啊啊在线| 天天操天天谢| 日韩在线不卡| 日皮免费视频| 中文字幕不卡在线| 国产黄色视屏| 亚洲AV成人一区二区三区不卡| 亚洲日韩AV电影| 欧美成人片免费看| 日韩视频中文字幕| 日本黄色大片| 日本成人久久| 一本色道久久综合无码人妻软件 | BBWBBw嫩| 91精品久久久久久| 国产精品无码专区| 黄色直播在线观看| 亚洲无码91| 久草视频这里只有精品| 一本色道久久综合亚洲怎么玩| 日韩一级性爱| 日AV在线无| 波多野结衣成人视频| 91免费福利| 手机av免费| 久久99网站| 日本黄色电影在线观看| 久久国产精品电影| 亚洲五月激情| 蜜桃久久久久久久| 日韩毛片| www深夜成人a√在线| 色日韩| 无码精品视频在线观看| 白嫩在线| 精品无码人妻一区二区三区| 精品999999| 九九九九九九精品视频| 中字幕视频在线永久在线观看免费| 欧美色欲| 国产黄色电影| 97在线观看视频| 三级乱伦| AV无码免费观看| 一级特黄AAAA片| 午夜成人鲁丝片午夜精品| 国产美女一级真毛片酒店| 东方av在线播放| 久久久黄色电影| 成人手机在线视频| 国产AVwww| 亚洲a级毛片| 自拍偷拍免费| 狠狠干亚洲视频| 91成人免费视频| 五月天操逼| 久热精品视频在线观看| 欧美老熟妇乱大交XXXXX| 免费一级a| 黄色操屄视频| 久久免费在线视频| 可以免费看的AV| 欧性猛交ⅩXXX乱大交| 日韩高清无码观看| 中文字幕+乱码+中文乱码91在线观看| 五月一区| 国产又粗又大又黄视频| 91香蕉国产成人App| 久久久电影| 翔田千里与黑人50分钟| 曰本中文字幕在线视频| 亚洲欧美成人| 日韩不卡在线| 人人妻人人摸| 亚洲最大成人网站| 无码av网站| 尻屄网站| 精品成人电影| 亚洲中文字幕一区二区| 黄色一级片视频| 中文字幕免费视频在线观看| 久久99嫩草熟妇人妻蜜臀| 一道本高清无码视频| 亚洲一级免费视频| www.日韩无码| 亚洲av无码乱码| 亚洲av自拍| 人人色人人看| 人妻福利导航| 婷婷丁香五月亚洲| 亚洲免费观看高清完整版在线观 | 亚洲无码免费观看视频| 国产精品一区二区在线| 水蜜桃一曲二区| 国产AV三级片| 东北毛片| 午夜视频福利| 泄火熟妇2-ThePorn| 欧美性爱中文字幕| 欧美你懂的| 操逼99| 无码一区二区三区免费| 殴美老妇BBBBBBBBB| 久久黄色视频网站| 免费无码国产在线53| 少妇无码视频| 日韩人妻一区二区| 无码熟妇| 国产无码专区| 日韩欧美国产| 无码中文字幕| 2015中文字幕黄色视频| 懂色成人视频在线观看| 亚洲色逼图片| 激情AAA| 久久系列观看完整指南| 午夜H片| 黄色a在线| 人人澡av| 日日摸日日添日日躁AV| AV牛牛| 熟女内射| 国产激情一区二区三区| 日韩无码av电影| 蜜桃系列一区二区精品| 成人激情免费视频| 天天躁日日躁狠狠| 西西444WWW无码精品| a视频| 中文字幕一区二区三区四区五区六区| 操bbbb| 免费一级黄色| 午夜福利欧美| 六月色婷婷| 国产黄色免费看| 上海熟搡BBB搡BBBB| 天干天干天夜夜操| 国产成人无码区免费视频| 欧美在线观看网站18| 五月天视频网| 欧美日韩视频一区二区| 特级西西WWW无码| 淫香淫色天天影视| 欧一美一婬一伦一区二区三区黑人-亚| 波多野结衣无码在线视频| 久久久久久无码| 3344在线观看免费下载视频 | 成人二区| 亚洲熟女一区二区三区妖精 | 黃色A片一級二級三級免費久久久 亚洲AV无码第一区二区三区蜜桃 亚洲综合免费观看高清完整版在线 | 免费看日韩毛片| 色伊人网| 老女人操屄| 天天日天天日天天操| 成人黄色录像| 人操人妻| 丁香五月网站| 亚洲无码AV在线播放| 伊人五月天激情| 日逼国产| 久久国产精品视频| 午夜午夜福利理论片在线播放| 亚洲日本一区二区三区| 老女人肏屄视频| 蜜臀AV午夜精品| 色网站在线| 日韩精品免费观看| 日韩国产成人| 日本无码中文字幕| 日韩一级在线观看| 亚洲无码三级片在线观看| 四川揉BBB搡BBB| 99热999| 操逼网五月天| 国产黄色免费电影| 久久久久久高清毛片一级| 狠狠操综合| 午夜天堂精品久久久久| 天天搞天天曰在线观看| 豆花无码视频一区二区| 欧美一级性爱在线观看| 青青草成人AV| A黄色视频| 91在线无码精品秘入口三人| 欧美人妻视频| 欧美色图88| 长泽梓黑人初解禁BDD07| 特黄A级毛片| 精品三级网站| 中文字幕有码在线看| a视频| 色色热| 内射在线播放| 成人欧美一区二区三区白人| 99精品国产一区二区| 五月天黄色片| 一级A片亲子乱中文| 无码一区二区视频| 免费a片在线观看| 国产一级美女操逼视频免费播放| 国内无码精品| 日韩一级在线免费观看| 迷情校园综合| 自拍三级片| 欧美级毛片一进一出| 日韩国产欧美精品一区| 国精产品一区二区三区在线观看| 日韩毛片一区二区| Av黄色| 狠操在线| 丁香五月av| 日本三级片在线动| 黄色网页免费观看| 麻豆一二三区| 婷婷深爱五月| 亚洲日韩Av无码中文字幕美国| 亚洲精品日韩中文字幕| 少妇人妻一区| 男女啪啪啪网站| 成人性爱在线播放| 在线观看视频91| 欧美国产精品| 丁香色婷婷五月天| 亚洲综人网| 亚洲综合干| 17c精品麻豆一区二区免费| 亚洲一区二区在线| 日韩av中文字幕在线播放 | 五月婷婷无码| 亚洲V视频| 抽插视频欧美| 蜜臀久久99精品久久久久久宅男 | 尤物yw| 丁香五月六月| 狠狠操网站| 黑人vs亚洲人在线播放| 内射一区二区| 色色色欧美| 免费视频91蜜桃| 男女操逼网站| 青青草综合视频| 国产灌醉| 黄色网页在线免费观看| 亚洲国产高清视频| a在线观看免费| 国产精品久免费的黄网站| 国产伦子伦一级A片在线| 97人人爽人人爽人人人| 高清无码免费视频| 精品人妻无码一区二区三区| 国产女人18毛片水真多成人如厕 | 久久久久亚洲AV成人网人人软件| 乱伦视频网| 在线免费AV片| 久久成人无码电影| 日本一区二区视频| 日本黄色免费视频| 小黄片在线免费观看| 精品日逼| 国产在线一区二区三区| 国产xxxxx| 动漫操逼视频| 一区二区三区免费播放| 乱伦视频网站| 99re欧美激情| 在线a视频免费观看| 三级国产AV| 亚洲骚货| 黄色视频网站日本| 国产美女福利| JiZZjiZZ亚洲成熟熟妇| 天天干天天干天天| 夜夜撸夜夜| 嫩BX区二区三区的区别| www.黄色在线观看| 久久精品水多多www| 翔田千里在线观看| 天天草天天| 丁香五香天堂网| 亚洲AV永久无码精品国产精| 三级片高清无码| 日韩A级毛片| 日本麻豆| 精品国内自产拍在线观看视频| 人人妻人人爱人人操| 久久久久久久| 成人免费啪啪视频| 亚洲精品久久久久久久久豆丁网| 亚洲高清在线视频| 中文字幕第一页亚洲| 亚洲国产久久| 欧美1区| 成人免费福利| 奇米无码| 免费一级做a爱片毛片A片小说| www.zaixianshipin| 日韩中字幕无码| 91精品国产99久久久久久天美| 青娱乐大香蕉| 免费A片在线| 天天日天天日天天干| 91黄色视频在线观看| 国产精品视频久久久久| 黄色片视频免费| 欧美自拍视频在线观看| 国产日皮| 久久综合操| 97人妻人人澡人人爽人人精品| 亚洲欧美精品AAAAAA片| 99re在线观看观看这里只有精品| 久久久亚洲熟妇熟女| 中文字幕东京热加勒比| 三级av在线观看| 成人三级视频在线观看| 亚洲国产高清在线观看视频| 青娱乐成人电影| 亚洲中文字幕视频在线观看| 亚洲免费MV| 操美女久久| 亚洲精品成人无码毛片| 久久精品禁一区二区三区四区五区 | 影音先锋人妻资源| 污网站18禁| 人人操夜夜操| 抽插逼| 91丨PORNY丨对白| 久视频在线| 99久久综合国产精品二区| 处破女初破全过免费看| 天堂精品| 色国产视频| 三级无码中文| 人人摸人人摸| 精品91在线视频| 激情五月天网| 国产粉嫩小泬白浆18p| 熟女人妻在线| 婷婷精品视频| 亚洲成人第一网站| 99视频这里有精品| 成人无码视频| 大鸡吧操视频| 日韩人妻无码中文字幕| 久久er视频| 国产一级a一片成人AV| 国产传媒在线观看| 小小拗女BBw搡BBBB搡| 91视频国产精品| 蜜桃黄片AV在线观看| 天天草av| 在线观看者亚洲| 久久久久久久久久久亚洲| 安微妇搡BBBB搡BBBB| 欧美日韩在线免费观看|