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

優雅的springboot參數校驗,你學會了嗎?

開發 前端
分享的這篇文章里的校驗參數注解使用方法,我是在一個springboot項目里親自重新測試驗證過的,springboot的版本是2.3.9.RELEASE,另外也引入了關于參數校驗的starter包,這樣就不用額外去引關于參數校驗的其他包了。

前言

在后端的接口開發過程,實際上每一個接口都或多或少有不同規則的參數校驗,有一些是基礎校驗,如非空校驗、長度校驗、大小校驗、格式校驗;也有一些校驗是業務校驗,如學號不能重重復、手機號不能重復注冊等;對于業務校驗,是需要和數據庫交互才能知道校驗結果;對于參數的基礎校驗,是有一些共有特征可以抽象出來,可以做成一個通用模板(java就是一種面向對象的編程語言,還記得天天快要說爛問爛的面向對象的三大特性嗎?)。基于實際場景的需要,java API中定義了一些Bean校驗的規范標準(JSR303:validation-api),但是沒有具體實現,不過hibernate validation和spring validation都提供了一些比較優秀的實現。如果在項目里,你還是像類似這樣的方式來進行參數校驗就太low了,活該加班到天亮(當然如果你所在公司目前仍然用統計代碼量來考核你的工作,就算我沒說,你可以繼續使用這種方式)。

@PostMapping("/add")
public String add(Student student) {
    if (null == student) {
        throw new RuntimeException("學生不為空");
    }
    if ("".equals(student.getStuCode())) {
        throw new RuntimeException("學號不能為空");
    }
    if ("".equals(student.getStuName())) {
        throw new RuntimeException("學生姓名不能為空");
    }
    if (null == student.getTeacher()) {
        throw new RuntimeException("學生的老師的不能為空");
    }
    if ("".equals(student.getTeacher().getTecName())) {
        throw new RuntimeException("學生的老師的姓名不能為空");
    }
    if ("".equals(student.getTeacher().getSubject())) {
        throw new RuntimeException("學生的老師的所授科目不為能空");
    }
    return "success";
}

依賴引入

分享的這篇文章里的校驗參數注解使用方法,我是在一個springboot項目里親自重新測試驗證過的,springboot的版本是2.3.9.RELEASE,另外也引入了關于參數校驗的starter包,這樣就不用額外去引關于參數校驗的其他包了;

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
  <version>2.3.9.RELEASE</version>
</dependency>

參數形式

在java項目中,前端請求后端的接口中,常用的請求類型主要是post和get。

  • 在POST請求中,通常使用requestBody傳遞參數,即前端以json報文的格式傳遞到后端controller層,spring會把json報文自動映射到@RequestBody修飾的形參實例;
  • 在GET請求中,通常使用requestParam/PathVariable傳遞參數,其中requestParam是指前端以key-value的形式把參數傳遞到后端,spring會把參數自動映射到@RequestParam修飾的形參數實例對象(@RequestParam可以,也可以沒有,只要參數key與controller層方法內形參類型的屬性名稱可以對應的上);@PathVariable是指spring可以將請求URL中占位符參數綁定到controller層方法的形參上;

常用到的約束注解

@Valid

被注釋的元素是一個對象,需要檢查此對象的所有字段值

@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 附加的 constraint

注解

作用

@Email

被注釋的元素必須是電子郵箱地址

@Length(min=, max=)

被注釋的字符串的大小必須在指定的范圍內

@NotEmpty

被注釋的字符串的必須非空

@Range(min=, max=)

被注釋的元素必須在合適的范圍內

@NotBlank

被注釋的字符串的必須非空

@URL(protocol=,

host=,    port=, 

regexp=, flags=)

被注釋的字符串必須是一個有效的url

@CreditCardNumber

被注釋的字符串必須通過Luhn校驗算法,

銀行卡,信用卡等號碼一般都用Luhn

計算合法性

@ScriptAssert

(lang=, script=, alias=)

要有Java Scripting API 即JSR 223 

("Scripting for the JavaTM Platform")的實現

@SafeHtml

(whitelistType=, 

additionalTags=)

classpath中要有jsoup包

參數基礎校驗

參數的基礎校驗,通常是指的非空、長度、最大值、最小值、格式(數字、郵箱、正則)等這些場景的校驗。

@RequestBody參數

1.在controller層的方法的形參數前面加一個@Valid或@Validated的注解;

2.在用@RequestBody修飾的類的屬性上加上約束注解,如@NotNull、@Length、@NotBlank;

3.@RequestBody參數在觸發校驗規則時,會拋出MethodArgumentNotValidException,這里使用統一的異常處理機制來處理異常;

總結:第1步的valid的作用就是一個標記,標明這個參數需要進行校驗;第2步的約束注解的上注明校驗的規則;第3步的統一校驗機制是前后臺請求后臺接口時,如果校驗參數的校驗規則后會拋出異常,異常附帶有約束注解上的提示信息,那么通過異常統一處理機制就可以統一處理異常信息,并以合適的方式返回給前臺(所謂合適的方式是指異常信息的格式可以自行制定)。

@PostMapping("/add")
public Student add( @Valid@RequestBody Student student){
    System.out.println(student.getStuName());
    return student;
}
@Data
public class Student  {
    @NotNull(message = "學號不能為空")
    @Length(min = 2, max = 4, message = "學號的長度范圍是(2,4)")
    private String stuCode;
    @NotNull(message = "姓名不能為空")
    @Length(min = 2, max = 3, message = "姓名的長度范圍是(2,3)")
    private String stuName;
}

@RequestParam參數/@PathVariable參數

1.在controller層的控制類上添加@Validated注解;

2.在controller層方法的校驗參數上添加約束注解,如@NotNull、@Pattern;

3.@RequestParam參數/@PathVariable參數在觸發校驗規則時,會拋出ConstraintViolationException類型的異常,所以在統一異常處理機制中添加對這種類型異常的處理機制;

@RestController
@RequestMapping("/student")
@Validated
public class StudentController {
    @GetMapping("/{sex}/info")
    public String getBySex(@PathVariable("sex") @Pattern(regexp = "boy||girl",message = "學生性別只能是boy或girl") String sex) {
        System.out.println("學生性別:" + sex);
    return "success";
    }
    @GetMapping("/getOne")
    public String getOne(@NotNull(message = "學生姓名不能為空") String stuName, @NotNull(message = "學生學號不能為空") String stuCode) {
        System.out.println("stuName:" + stuName + ",stuCode:" + stuCode);
    return "success";
    }
}

異常統一處理

@RestControllerAdvice
public class CommonExceptionHandler {


    /**
     * 用于捕獲@RequestBody類型參數觸發校驗規則拋出的異常
     *
     * @param e
     * @return
     */
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public String handleValidException(MethodArgumentNotValidException e) {
        StringBuilder sb = new StringBuilder();
        List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
        if (!CollectionUtils.isEmpty(allErrors)) {
            for (ObjectError error : allErrors) {
                sb.append(error.getDefaultMessage()).append(";");
            }
        }
        return sb.toString();
    }


    /**
     * 用于捕獲@RequestParam/@PathVariable參數觸發校驗規則拋出的異常
     *
     * @param e
     * @return
     */
    @ExceptionHandler(value = ConstraintViolationException.class)
    public String handleConstraintViolationException(ConstraintViolationException e) {
        StringBuilder sb = new StringBuilder();
        Set<ConstraintViolation<?>> conSet = e.getConstraintViolations();
        for (ConstraintViolation<?> con : conSet) {
            String message = con.getMessage();
            sb.append(message).append(";");
        }
        return sb.toString();
    }
}

嵌套校驗

在實際項目中有這樣一種場景,用來接收參數的類的屬性字段也是一個對象,屬性對象的字段也需要進行必要的參數校驗,這個時候可以使用嵌套校驗來解決這個問題,hibernate-validator提供了具體的解決方式。

1.在controller層方法的形參數前添加@Validated注解,如果有分組校驗的場景,則注明分組信息;如果校驗不需要分組,可以不注明分組信息;

2.在接收參數的類的屬性是對象的字段上添加@Valide注解,這里需要注意的是一定是@Valid,不是@Validated,因為@Valid的實現是由hibernate-validator提供,有嵌套校驗的能力,而@Validated是由spring-validation提供的具體實現方式,@Validated有分組校驗的能力,但是沒有嵌套校驗的能力;(java API規范(JSR303)定義了Bean的校驗標準validation-api,但是沒有具體的實現,所以各有各的實現,在功能上也是有區別的)

3.嵌套屬性類上的約束注解的用法,與用來接收參數的對象屬性上的約束注解的用法是一樣的;

總結:@Valid的實現是由hibernate-validator提供,有嵌套校驗的能力,但是沒有分組校驗的能力,@Validated是由spring-validation提供的具體實現方式,@Validated有分組校驗的能力,但是沒有嵌套校驗的能力,在使用的過程須特別注意,要根據實際需要進行剪裁。

@PostMapping("/addStuaAndTeach")
public String addStuaAndTeach(@Validated(AddStuAndTeach.class) @RequestBody Student student){
    System.out.println("學生的工號:"+student.getStuCode()+",學生的老師的姓名:"+student.getTeacher().getTecName());
    return "success";
}
@Data
public class Teacher {
    @NotNull(message = "學生的老師姓名不能為空",groups = AddStuAndTeach.class)
    private String tecName;
    @NotNull(message = "學生的老師教授科目不能為空",groups = AddStuAndTeach.class)
    private String subject;
}
public interface AddStuAndTeach {
}
@Data
public class Student {
   
    @NotNull(message = "學生id不能為空",groups = QueryDetail.class)
    private Integer id;
    @NotNull(message = "學號不能為空",groups = AddStudent.class)
    @Length(min = 2, max = 4, message = "學號的長度范圍是(2,4)")
    private String stuCode;
    @NotNull(message = "姓名不能為空",groups = AddStudent.class)
    @Length(min = 2, max = 3, message = "姓名的長度范圍是(2,3)",groups = AddStudent.class)
    private String stuName;
    @Valid
    @NotNull(message = "學生的老師不能為空",groups = AddStuAndTeach.class)
    private Teacher teacher;
}

分組校驗

在實際的項目中,可能多個方法使用同一個類來接收參數,但是不同的方法的校驗規則又是不同的,這個時候就可以使用分組校驗的方式來解決這個問題了,spring-validation提供了具體的實現方式。

1.聲明分組用的接口,比如添加和查詢詳情的時候,校驗的規則肯定是不一樣的,添加的時候一般不用傳id,由后臺自增長生成,查詢詳情的時候id是必須傳的;

2.在controller層方法的校驗參數上添加@Validated參數,同時注解里要注明校驗參數的分組信息;

3.在校驗參數的類上的線束注解上,也要注明校驗參數的分組信息;

總結:在接口的入口方法參數上、校驗參數上都注明了分組的信息,那么接口被用的時候,就可以根據不同的分組信息執行不同約束注解的校驗邏輯了,這個能力是spring-validation提供的,所以這種場景下,controller層方法的上注解要用@Validated,@Valid注解沒有這種能力。

//用于添加場景參數校驗分組
public interface AddStudent {
}
//用于查詢詳情場景參數校驗分組
public interface QueryDetail {
}
@PostMapping("/add")
public Student add(@Validated(AddStudent.class) @RequestBody Student student) {
    System.out.println(student.getStuName());
    return student;
}


@PostMapping("/detail")
public String detail(@Validated(QueryDetail.class)@RequestBody Student student){
    System.out.println("學生id:"+student.getId());
    return "success";
}
@Data
public class Student {
 
    @NotNull(message = "學生id不能為空",groups = QueryDetail.class)
    private Integer id;
    @NotNull(message = "學號不能為空",groups = AddStudent.class)
    @Length(min = 2, max = 4, message = "學號的長度范圍是(2,4)")
    private String stuCode;
    @NotNull(message = "姓名不能為空",groups = AddStudent.class)
    @Length(min = 2, max = 3, message = "姓名的長度范圍是(2,3)",groups = AddStudent.class)
    private String stuName;
    }


責任編輯:武曉燕 來源: 凡夫編程
相關推薦

2024-05-29 07:47:30

SpringJava@Resource

2023-11-27 07:26:42

Springboot容器

2023-08-08 08:23:08

Spring日志?線程池

2022-07-08 09:27:48

CSSIFC模型

2024-01-19 08:25:38

死鎖Java通信

2023-07-26 13:11:21

ChatGPT平臺工具

2024-02-04 00:00:00

Effect數據組件

2023-01-10 08:43:15

定義DDD架構

2024-02-02 11:03:11

React數據Ref

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2023-12-05 17:57:13

nginx參數

2024-10-17 10:00:59

2024-05-07 07:58:47

C#程序類型

2025-01-07 08:37:35

2023-01-30 09:01:54

圖表指南圖形化

2024-08-06 09:47:57

2024-05-06 00:00:00

InnoDBView隔離

2023-10-10 11:04:11

Rust難點內存

2024-07-31 08:39:45

Git命令暫存區
點贊
收藏

51CTO技術棧公眾號

日韩精品三区| 毛片免费在线| 亚洲天堂男人| 亚洲欧美中文日韩v在线观看| 韩国日本美国免费毛片| 日本a在线播放| 成人aa视频在线观看| 国产成人a亚洲精品| 亚洲天堂一级片| 久久porn| 欧美放荡的少妇| 国产不卡一区二区视频| 成年人在线视频| 成人午夜免费视频| 国产精品日日摸夜夜添夜夜av| 精品国产乱码久久久久久鸭王1| 色综合www| 欧美成人三级在线| 国产高潮免费视频| 98色花堂精品视频在线观看 | 精品一区二区视频在线观看| 欧美成a人片免费观看久久五月天| 亚洲国产精品综合小说图片区| 视频一区二区三区在线观看| 搡老岳熟女国产熟妇| 韩国av一区二区三区| 欧美专区日韩视频| 国产午夜激情视频| 欧美大片一区| 日韩一中文字幕| 谁有免费的黄色网址| 国产伦精品一区二区三区在线播放 | 国产情侣自拍av| 综合久久婷婷| www日韩欧美| 欧美性猛交xxxx乱| 羞羞色国产精品网站| 亚洲精品一区二区三区蜜桃下载 | 欧美国产欧美综合| 久久人人九九| 天天躁日日躁狠狠躁喷水| 国产精品一区二区不卡| 国产日韩欧美电影在线观看| 免费av中文字幕| 另类国产ts人妖高潮视频| 97人人做人人爱| 久久久久久久久艹| 国产精品九九| 久久久久久69| 国产精品二区一区二区aⅴ| 欧美日韩网址| 九九久久国产精品| 青青草手机在线视频| 在线精品小视频| 欧美成人午夜免费视在线看片| 国产黄色小视频网站| 亚洲mv大片欧洲mv大片| 精品国产一区二区在线| 免费精品在线视频| 99精品视频在线观看播放| 日日狠狠久久偷偷四色综合免费 | 凸凹人妻人人澡人人添| 99re成人在线| 日韩精品在在线一区二区中文| 国产精品四虎| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲欧美日韩综合一区| 国产区在线观看| 一区二区三区中文在线观看| av免费看网址| 国产欧美一区二区三区精品酒店| 色综合视频在线观看| 三上悠亚在线一区二区| 国产一区二区三区精品在线观看| 日韩午夜电影在线观看| 成熟妇人a片免费看网站| 免费欧美一区| 日韩在线www| 久久午夜鲁丝片午夜精品| av成人国产| 国产精品亚洲激情| www.xxx国产| 久久婷婷成人综合色| 亚洲国产午夜伦理片大全在线观看网站 | 亚洲欧美中文字幕| 亚洲一级理论片| 欧美激情精品久久久六区热门| 国外视频精品毛片| 亚洲男人天堂网址| 国产乱码精品一区二区三区忘忧草 | 8050国产精品久久久久久| 男人天堂av在线播放| 久久99久久精品| 国产精品一区而去| 川上优的av在线一区二区| 亚洲人成人一区二区在线观看| 日韩精品在线中文字幕| av成人亚洲| 欧美成人aa大片| 国产视频三区四区| 狠狠爱成人网| 国产精品专区h在线观看| 黄频在线免费观看| 国产精品无人区| 丁香花在线影院观看在线播放| 欧美日韩尤物久久| 亚洲国产精品成人一区二区| 国产精品久久久久久成人| 亚洲大片av| 91色琪琪电影亚洲精品久久| 日本中文字幕电影在线观看| 日韩美女啊v在线免费观看| 日本网站免费在线观看| 久久久久毛片免费观看| 亚洲欧美自拍一区| 韩国av免费观看| 国产伦精品一区二区三区视频青涩| 日本免费高清一区二区| 福利网站在线观看| 制服丝袜av成人在线看| 日本美女xxx| 西西人体一区二区| 动漫一区二区在线| 久操视频在线观看| 欧美性受xxxx| 性欧美精品中出| 99精品视频免费全部在线| 9a蜜桃久久久久久免费| 日本精品在线| 欧美午夜电影一区| 成年人免费观看视频网站| 日韩一级不卡| 99国产精品久久久久老师| 麻豆传媒在线观看| 欧美美女黄视频| 黄色激情小视频| 麻豆久久久久久久| 亚洲欧洲国产精品久久| 日本精品在线中文字幕| 亚洲欧美日韩成人| 日本视频在线观看免费| 91香蕉国产在线观看软件| 成年人午夜免费视频| 亚洲精品一区国产| 欧美激情二区三区| www.五月婷婷| 亚洲国产精品自拍| 这里只有精品在线观看视频| 亚洲毛片网站| 久久国产手机看片| 免费看男女www网站入口在线| 精品国产乱码久久久久久1区2区 | 欧美性精品220| 日韩网站在线播放| 日韩中文字幕一区二区三区| 秋霞毛片久久久久久久久| 香蕉视频亚洲一级| 国产一区二区三区日韩欧美| 中文资源在线播放| 国产精品乱码一区二三区小蝌蚪| 少妇一级淫免费播放| 希岛爱理一区二区三区| 亚洲综合日韩中文字幕v在线| 日韩三级免费| 日韩国产精品视频| 香蕉污视频在线观看| 国产精品麻豆欧美日韩ww| 中文字幕在线视频精品| 欧美网站在线| 久久久久久久久久久久久9999| 成人美女视频| 色偷偷av亚洲男人的天堂| 99热这里只有精品66| 亚洲一区二区三区视频在线| 中文在线一区二区三区| 视频精品一区二区| 天堂av在线中文| 久久97精品| 国产精品私拍pans大尺度在线| 超碰免费在线播放| 日韩电影第一页| 中文字幕在线播放不卡| 亚洲国产色一区| 亚洲天堂网一区二区| 久久精品99国产精品日本| www.69av| 精品久久视频| yellow视频在线观看一区二区| 小视频免费在线观看| 日韩中文字幕网址| 日本韩国在线观看| 欧美日韩黄色一区二区| 国产真实夫妇交换视频| 中文字幕巨乱亚洲| 污污污www精品国产网站| 日韩vs国产vs欧美| 搞av.com| 91偷拍一区二区三区精品| 国产精品视频免费一区二区三区| 97久久香蕉国产线看观看| 欧美日韩国产成人在线| 高清美女视频一区| 精品99一区二区三区| 中文字幕在线观看国产| 亚洲第一激情av| 国产三级精品三级观看| 久久九九国产精品| 岛国精品一区二区三区| 先锋影音国产一区| 亚洲精品中字| 偷拍视屏一区| 国产高清自拍99| av日韩一区| 国产精品人人做人人爽| 伊人网在线播放| 欧美国产日韩免费| 麻豆传媒在线完整视频| 国产午夜精品视频免费不卡69堂| 日韩中文字幕免费观看| 欧美一卡2卡3卡4卡| 中文在线免费观看| 欧洲一区在线电影| 91video| 亚洲超碰精品一区二区| 农村黄色一级片| 国产精品久久久久久久久免费丝袜| 成年人在线观看av| 成人av免费观看| 欧美久久久久久久久久久| 久久99热狠狠色一区二区| 国产一二三区av| 日韩不卡手机在线v区| 日韩精品一区二区三区色欲av| 999在线观看精品免费不卡网站| 精品人妻人人做人人爽| 91精品电影| 潘金莲一级淫片aaaaa免费看| 日韩国产一区二区三区| 日韩精品久久久毛片一区二区| 婷婷综合一区| 日本欧洲国产一区二区| 精品久久网站| 先锋影音一区二区三区| 欧美特黄一级大片| 亚洲午夜精品久久久久久浪潮| 精品国产一区一区二区三亚瑟| 免费看成人av| 精品国产日韩欧美| 日韩精品欧美专区| 色无极亚洲影院| 国产日韩视频在线播放| 一区二区三区在线电影| 喜爱夜蒲2在线| 国产一区二区三区四区三区四| 乱熟女高潮一区二区在线| 国模吧视频一区| 男人日女人下面视频| 校园春色综合网| 日本中文字幕高清| 美女在线视频一区| 99九九99九九九99九他书对| 精品一区二区免费| 制服下的诱惑暮生| 成人精品视频网站| 欧美一区二区三区成人精品| 国产日韩欧美在线一区| 国产麻豆视频在线观看| 亚洲麻豆国产自偷在线| 国产精品白浆一区二小说| 午夜精品免费在线| 黄色av网站免费| 6080日韩午夜伦伦午夜伦| 性一交一乱一色一视频麻豆| 精品视频—区二区三区免费| 成人jjav| 欧美理论片在线观看| 日本在线播放一二三区| 国产精品流白浆视频| 亚洲精品一区在线| 日韩国产高清一区| 女人天堂亚洲aⅴ在线观看| 欧美男女爱爱视频| 奇米四色…亚洲| 美女伦理水蜜桃4| 国产日产欧美一区| 国产精品成人免费观看| 欧美日韩中国免费专区在线看| 中文字幕制服诱惑| 亚洲成人久久一区| 婷婷视频在线| 97在线免费视频| 日韩毛片免费视频一级特黄| 国产精品制服诱惑| 成人羞羞动漫| 免费无遮挡无码永久视频| 久久99精品久久久久久动态图 | 亚洲天堂中文字幕| 在线天堂中文字幕| 69久久99精品久久久久婷婷| 香蕉国产在线视频| 欧美另类在线播放| 成人做爰视频www| 国内精品久久久久久久果冻传媒| 99久久婷婷这里只有精品| 欧美三级一级片| 国产黄色成人av| av在线播放中文字幕| 亚洲va国产天堂va久久en| 88av在线视频| 亚洲人成网站999久久久综合| 中文在线手机av| 国产乱人伦真实精品视频| 色天下一区二区三区| 国产亚洲黄色片| 国产乱码精品一区二区三| 大吊一区二区三区| 日韩欧美在线观看| 亚洲精品网站在线| 欧美另类老女人| 精品国产亚洲一区二区三区在线| 日本一区不卡| 一区二区三区四区五区在线| 乱码一区二区三区| 亚洲欧美一区二区三区孕妇| 正在播放亚洲精品| 伊人久久综合97精品| www.成人爱| 久久久久网址| 99国产成+人+综合+亚洲欧美| 国产chinesehd精品露脸| 中文字幕一区二区三区在线不卡| 中文字幕在线日本| 亚洲香蕉成视频在线观看| 国产ktv在线视频| 国内精品久久久久久久果冻传媒| 欧美日韩一区自拍| 99热这里只有精品2| 亚洲日本欧美天堂| 国产毛片在线视频| 久久中文精品视频| 日韩区欧美区| 无码人妻精品一区二区蜜桃网站| 国产成人免费视| 青青草原国产视频| 亚洲第一级黄色片| аⅴ资源天堂资源库在线| 精品国产一区二区三区四区vr | 成人综合久久| 亚洲欧洲日本精品| 国产精品不卡在线观看| 亚洲一区中文字幕永久在线| 色777狠狠综合秋免鲁丝| 日韩午夜电影免费看| 熟妇熟女乱妇乱女网站| 国产在线一区二区综合免费视频| 亚洲综合视频网站| 日韩一区二区免费电影| 美女航空一级毛片在线播放| 国产欧美韩日| 久久aⅴ乱码一区二区三区| 国产高清一区二区三区四区| 欧美男生操女生| 中文字幕在线观看网站| 成人动漫视频在线观看免费| 激情五月***国产精品| 9.1成人看片免费版| 欧美日韩久久一区| 神马午夜伦理不卡 | 97人人模人人爽人人澡| 亚洲最快最全在线视频| 水莓100在线视频| 国产精品色婷婷视频| 夜间精品视频| 中文字幕无码人妻少妇免费| 欧美亚洲综合网| a黄色片在线观看| 久久久久久久久四区三区| 免费在线看成人av| 精品深夜av无码一区二区老年| 日韩精品久久久久| 日韩三级一区| 欧美日韩二三区| 日韩一区在线看| 天堂v在线观看| 国产精品中文在线| 日韩一级免费| 亚洲视频重口味| 国产视频精品自拍| 精品国产一区二区三区性色av| 18岁网站在线观看| 亚洲视频在线一区观看| 五月激情丁香婷婷| 91九色综合久久| 国产精品嫩草99av在线| 日韩在线一卡二卡| 亚洲欧洲日产国码av系列天堂| 三级欧美日韩| 欧美日韩怡红院| 亚洲不卡av一区二区三区| 五月婷婷在线视频|