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

Java如何優(yōu)雅地實現(xiàn)接口數(shù)據(jù)校驗

共 10159字,需瀏覽 21分鐘

 ·

2020-12-12 08:32


本篇文章給大家分享平時開發(fā)中總結(jié)的一點小技巧!在工作中寫過Java程序的朋友都知道,目前使用Java開發(fā)服務(wù)最主流的方式就是通過Spring MVC定義一個Controller層接口,并將接口請求或返回參數(shù)分別定義在一個Java實體類中,這樣Spring MVC在接收到Http請求(POST/GET)后,就會自動將請求報文自動映射成一個Java對象。這樣的代碼通常是這樣寫的:


@RestController
public?class?OrderController?{

????@Autowired
????private?OrderService?orderServiceImpl;

????@PostMapping("/createOrder")
????public?CreateOrderBO?validationTest(@Validated?CreateOrderDTO?createOrderDTO)?{
????????return?orderServiceImpl.createOrder(createOrderDTO);
????}
}


這樣的代碼相信大家并不陌生,但在后續(xù)的邏輯實現(xiàn)過程中卻會遇到這樣的問題:“在接收請求參數(shù)后如何實現(xiàn)報文對象數(shù)據(jù)值的合法性校驗?”。一些同學(xué)也可能認(rèn)為這并不是什么問題,因為具體某個參數(shù)字段是否為空、值的取值是否在約定范圍、格式是否合法等等,在業(yè)務(wù)代碼中校驗就好了。例如可以在Service實現(xiàn)類中對報文格式進(jìn)行各種if-else的數(shù)據(jù)校驗。


從功能上說冗余的if-else代碼沒啥毛病,但從代碼的優(yōu)雅性來說冗長的if-else代碼會顯得非常臃腫。接下來的內(nèi)容將給大家介紹一種處理此類問題的實用方法。具體將從以下幾個方面進(jìn)行介紹:


  • 使用@Validated注解實現(xiàn)Controller接口層數(shù)據(jù)直接綁定校驗;

  • 擴展約束性注解實現(xiàn)數(shù)據(jù)取值范圍的校驗;

  • 更加靈活的對象數(shù)據(jù)合法性校驗工具類封裝;

  • 數(shù)據(jù)合法性校驗結(jié)果異常統(tǒng)一返回處理;


Controller接口層數(shù)據(jù)綁定校驗


實際上在Java開發(fā)中目前普通使用的Bean數(shù)據(jù)校驗工具是"hibernate-validator",它是一個hibernete獨立的jar包,所以使用這個jar包并不需要一定要集成Hibernete框架。該jar包主要實現(xiàn)并擴展了javax.validation(是一個基于JSR-303標(biāo)準(zhǔn)開發(fā)出來的Bean校驗規(guī)范)接口。


由于Spring Boot在內(nèi)部默認(rèn)集成了"hibernate-validator",所以使用Spring Boot構(gòu)建的Java工程可以直接使用相關(guān)注解來實現(xiàn)Bean的數(shù)據(jù)校驗。例如我們最常編寫的Controller層接口參數(shù)對象,可以在定義Bean類時直接編寫這樣的代碼:


@Data
public?class?CreateOrderDTO?{

????@NotNull(message?=?"訂單號不能為空")
????private?String?orderId;
????@NotNull(message?=?"訂單金額不能為空")
????@Min(value?=?1,?message?=?"訂單金額不能小于0")
????private?Integer?amount;
????@Pattern(regexp?=?"^1[3|4|5|7|8][0-9]{9}$",?message?=?"用戶手機號不合法")
????private?String?mobileNo;
????private?String?orderType;
????private?String?status;
}


如上所示代碼,我們可以使用@NotNull注解來約束該字段必須不能為空,也可以使用@Min注解來約束字段的最小取值,或者還可以通過@Pattern注解來使用正則表達(dá)式來約束字段的格式(如手機號格式)等等。


以上這些注解都是“hibernate-validator”依賴包默認(rèn)提供的,更多常用的注解還有很多,例如:


利用這些約束注解,我們就可以很輕松的搞定接口數(shù)據(jù)校驗,而不需要在業(yè)務(wù)邏輯中編寫大量的if-else來進(jìn)行數(shù)據(jù)合法性校驗。而定義好Bean參數(shù)對象并使用相關(guān)注解實現(xiàn)參數(shù)值約束后,在Controller層接口定義中只需要使用@Validated注解就可以實現(xiàn)在接收參數(shù)后自動進(jìn)行數(shù)據(jù)綁定校驗了,具體代碼如下:


@PostMapping("/createOrder")
public?CreateOrderBO?validationTest(@Validated?CreateOrderDTO?createOrderDTO)?{
????return?orderServiceImpl.createOrder(createOrderDTO);
}


如上所示,在Controller層中通過Spring提供的@Validated注解可以自動實現(xiàn)數(shù)據(jù)Bean的綁定校驗,如果數(shù)據(jù)異常則會統(tǒng)一拋出校驗異常!



約束性注解擴展


在“hibernate-validator”依賴jar包中,雖然提供了很多很方便的約束注解,但是也有不滿足某些實際需要的情況,例如我們想針對參數(shù)中的某個值約定其值的枚舉范圍,如orderType訂單類型只允許傳“pay”、“refund”兩種值,那么現(xiàn)有的約束注解可能就沒有特別適用的了。此外,如果對這樣的枚舉值,我們還想在約束定義中直接匹配代碼中的枚舉定義,以更好地統(tǒng)一接口參數(shù)與業(yè)務(wù)邏輯的枚舉定義。那么這種情況下,我們還可以自己擴展定義相應(yīng)地約束注解邏輯。

接下來我們定義新的約束注解@EnumValue,來實現(xiàn)上面我們所說的效果,具體代碼如下:


@Target({METHOD,?FIELD,?ANNOTATION_TYPE,?CONSTRUCTOR,?PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy?=?{EnumValueValidator.class})
public?@interface?EnumValue?{

????//默認(rèn)錯誤消息
????String?message()?default?"必須為指定值";

????//支持string數(shù)組驗證
????String[]?strValues()?default?{};

????//支持int數(shù)組驗證
????int[]?intValues()?default?{};

????//支持枚舉列表驗證
????Class[]?enumValues()?default?{};

????//分組
????Class[]?groups()?default?{};

????//負(fù)載
????Class[]?payload()?default?{};

????//指定多個時使用
????@Target({FIELD,?METHOD,?PARAMETER,?ANNOTATION_TYPE})
????@Retention(RUNTIME)
????@Documented
????@interface?List?{
????????EnumValue[]?value();
????}

????/**
?????*?校驗類邏輯定義
?????*/

????class?EnumValueValidator?implements?ConstraintValidator<EnumValue,?Object>?{

????????//字符串類型數(shù)組
????????private?String[]?strValues;
????????//int類型數(shù)組
????????private?int[]?intValues;
????????//枚舉類
????????private?Class[]?enumValues;

????????/**
?????????*?初始化方法
?????????*
?????????*?@param?constraintAnnotation
?????????*/

????????@Override
????????public?void?initialize(EnumValue?constraintAnnotation)?{
????????????strValues?=?constraintAnnotation.strValues();
????????????intValues?=?constraintAnnotation.intValues();
????????????enumValues?=?constraintAnnotation.enumValues();
????????}

????????/**
?????????*?校驗方法
?????????*
?????????*?@param?value
?????????*?@param?context
?????????*?@return
?????????*/

????????@SneakyThrows
????????@Override
????????public?boolean?isValid(Object?value,?ConstraintValidatorContext?context)?{
????????????//針對字符串?dāng)?shù)組的校驗匹配
????????????if?(strValues?!=?null?&&?strValues.length?>?0)?{
????????????????if?(value?instanceof?String)?{
????????????????????for?(String?s?:?strValues)?{//判斷值類型是否為Integer類型
????????????????????????if?(s.equals(value))?{
????????????????????????????return?true;
????????????????????????}
????????????????????}
????????????????}
????????????}
????????????//針對整型數(shù)組的校驗匹配
????????????if?(intValues?!=?null?&&?intValues.length?>?0)?{
????????????????if?(value?instanceof?Integer)?{//判斷值類型是否為Integer類型
????????????????????for?(Integer?s?:?intValues)?{
????????????????????????if?(s?==?value)?{
????????????????????????????return?true;
????????????????????????}
????????????????????}
????????????????}
????????????}
????????????//針對枚舉類型的校驗匹配
????????????if?(enumValues?!=?null?&&?enumValues.length?>?0)?{
????????????????for?(Class?cl?:?enumValues)?{
????????????????????if?(cl.isEnum())?{
????????????????????????//枚舉類驗證
????????????????????????Object[]?objs?=?cl.getEnumConstants();
????????????????????????//這里需要注意,定義枚舉時,枚舉值名稱統(tǒng)一用value表示
????????????????????????Method?method?=?cl.getMethod("getValue");
????????????????????????for?(Object?obj?:?objs)?{
????????????????????????????Object?code?=?method.invoke(obj,?null);
????????????????????????????if?(value.equals(code.toString()))?{
????????????????????????????????return?true;
????????????????????????????}
????????????????????????}
????????????????????}
????????????????}
????????????}
????????????return?false;
????????}
????}
}


如上所示的@EnumValue約束注解,是一個非常實用的擴展,通過該注解我們可以實現(xiàn)對參數(shù)取值范圍(不是大小范圍)的約束,它支持對int、string以及enum三種數(shù)據(jù)類型的約束,具體使用方式如下:

/**
?*?定制化注解,支持參數(shù)值與指定類型數(shù)組列表值進(jìn)行匹配(缺點是需要將枚舉值寫死在字段定義的注解中)
?*/

@EnumValue(strValues?=?{"pay",?"refund"},?message?=?"訂單類型錯誤")
private?String?orderType;
/**
?*?定制化注解,實現(xiàn)參數(shù)值與枚舉列表的自動匹配校驗(能更好地與實際業(yè)務(wù)開發(fā)匹配)
?*/

@EnumValue(enumValues?=?Status.class,?message?=?"狀態(tài)值不在指定范圍")
private?String?status;


如上所示代碼,該擴展注解既可以使用strValues或intValues屬性來編程列舉取值范圍,也可以直接通過enumValues來綁定枚舉定義。但是需要注意,處于通用考慮,具體枚舉定義的屬性的名稱要統(tǒng)一匹配為value、desc,例如Status枚舉定義如下:


public?enum?Status?{
????PROCESSING(1,?"處理中"),
????SUCCESS(2,?"訂單已完成");
????Integer?value;
????String?desc;

????Status(Integer?value,?String?desc)?{
????????this.value?=?value;
????????this.desc?=?desc;
????}

????public?Integer?getValue()?{
????????return?value;
????}

????public?String?getDesc()?{
????????return?desc;
????}
}


通過注解擴展,就能實現(xiàn)更多方便的約束性注解!



更加靈活數(shù)據(jù)校驗工具類封裝


除了上面直接在Controller層使用@Validated進(jìn)行綁定數(shù)據(jù)校驗外,在有些情況,例如你的參數(shù)對象中的某個字段是一個復(fù)合對象,或者業(yè)務(wù)層的某個方法所定義的入?yún)ο笠残枰M(jìn)行數(shù)據(jù)合法性校驗,那么這種情況下如何實現(xiàn)像Controller層一樣的校驗效果呢?

需要說明在這種情況下@Validated已經(jīng)無法直接使用了,因為@Validated注解發(fā)揮作用主要是Spring MVC在接收參數(shù)的過程中實現(xiàn)了自動數(shù)據(jù)綁定校驗,而在普通的業(yè)務(wù)方法或者復(fù)合參數(shù)對象中是沒有辦法直接綁定校驗的。這種情況下,我們可以通過定義ValidateUtils工具類來實現(xiàn)一樣的校驗效果,具體代碼如下:


public?class?ValidatorUtils?{

????private?static?Validator?validator?=?Validation.buildDefaultValidatorFactory().getValidator();

????/**
?????*?bean整體校驗,有不合規(guī)范,拋出第1個違規(guī)異常
?????*/

????public?static?void?validate(Object?obj,?Class...?groups)?{
????????Set>?resultSet?=?validator.validate(obj,?groups);
????????if?(resultSet.size()?>?0)?{
????????????//如果存在錯誤結(jié)果,則將其解析并進(jìn)行拼湊后異常拋出
????????????List?errorMessageList?=?resultSet.stream().map(o?->?o.getMessage()).collect(Collectors.toList());
????????????StringBuilder?errorMessage?=?new?StringBuilder();
????????????errorMessageList.stream().forEach(o?->?errorMessage.append(o?+?";"));
????????????throw?new?IllegalArgumentException(errorMessage.toString());
????????}
????}
}


如上所示,我們定義了一個基于"javax.validation"接口的工具類實現(xiàn),這樣就可以在非@Validated直接綁定校驗的場景中通過校驗工具類來實現(xiàn)對Bean對象約束注解的校驗處理,具體使用代碼如下:


public?boolean?orderCheck(OrderCheckBO?orderCheckBO)?{
????//對參數(shù)對象進(jìn)行數(shù)據(jù)校驗
????ValidatorUtils.validate(orderCheckBO);
????return?true;
}


而方法入?yún)ο髣t還是可以繼續(xù)使用前面我們介紹的約束性注解進(jìn)行約定,例如上述方法的入?yún)ο蠖x如下:


@Data
@Builder
public?class?OrderCheckBO?{

????@NotNull(message?=?"訂單號不能為空")
????private?String?orderId;
????@Min(value?=?1,?message?=?"訂單金額不能小于0")
????private?Integer?orderAmount;
????@NotNull(message?=?"創(chuàng)建人不能為空")
????private?String?operator;
????@NotNull(message?=?"操作時間不能為空")
????private?String?operatorTime;
}


這樣在編程體驗上就可以整體上保持一致!



數(shù)據(jù)合法性校驗結(jié)果異常統(tǒng)一處理


通過前面我們所講的各種約束注解,我們實現(xiàn)了對Controller層接口以及業(yè)務(wù)方法參數(shù)對象的統(tǒng)一數(shù)據(jù)校驗。而為了保持校驗異常處理的統(tǒng)一處理和錯誤報文統(tǒng)一輸出,我們還可以定義通用的異常處理機制,來保證各類數(shù)據(jù)校驗錯誤都能以統(tǒng)一錯誤格式反饋給調(diào)用方。具體代碼如下:


@Slf4j
@ControllerAdvice
public?class?GlobalExceptionHandler?{
????/**
?????*?統(tǒng)一處理參數(shù)校驗錯誤異常(非Spring接口數(shù)據(jù)綁定驗證)
?????*
?????*?@param?response
?????*?@param?e
?????*?@return
?????*/

????@ExceptionHandler(BindException.class)
????@ResponseBody
????public?ResponseResult?processValidException(HttpServletResponse?response,?BindException?e)?{
????????response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
????????//獲取校驗錯誤結(jié)果信息,并將信息組裝
????????List?errorStringList?=?e.getBindingResult().getAllErrors()
????????????????.stream().map(ObjectError::getDefaultMessage).collect(Collectors.toList());
????????String?errorMessage?=?String.join(";?",?errorStringList);
????????response.setContentType("application/json;charset=UTF-8");
????????log.error(e.toString()?+?"_"?+?e.getMessage(),?e);
????????return?ResponseResult.systemException(GlobalCodeEnum.GL_FAIL_9998.getCode(),
????????????????errorMessage);
????}

????/**
?????*?統(tǒng)一處理參數(shù)校驗錯誤異常
?????*
?????*?@param?response
?????*?@param?e
?????*?@return
?????*/

????@ExceptionHandler(IllegalArgumentException.class)
????@ResponseBody
????public?ResponseResult?processValidException(HttpServletResponse?response,?IllegalArgumentException?e)?{
????????response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
????????String?errorMessage?=?String.join(";?",?e.getMessage());
????????response.setContentType("application/json;charset=UTF-8");
????????log.error(e.toString()?+?"_"?+?e.getMessage(),?e);
????????return?ResponseResult.systemException(GlobalCodeEnum.GL_FAIL_9998.getCode(),
????????????????errorMessage);
????}

????...
}


如上所示,我們定義了針對前面兩種數(shù)據(jù)校驗方式的統(tǒng)一異常處理機制,這樣數(shù)據(jù)校驗的錯誤信息就能通過統(tǒng)一的報文格式反饋給調(diào)用端,從而實現(xiàn)接口數(shù)據(jù)報文的統(tǒng)一返回!


其中通用的接口參數(shù)對象ResponseResult的代碼定義如下:


@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonPropertyOrder({"code",?"message",?"data"})
public?class?ResponseResult<T>?implements?Serializable?{

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

????/**
?????*?返回的對象
?????*/

????@JsonInclude(JsonInclude.Include.NON_NULL)
????private?T?data;
????/**
?????*?返回的編碼
?????*/

????private?Integer?code;
????/**
?????*?返回的信息
?????*/

????private?String?message;

????/**
?????*?@param?data?返回的數(shù)據(jù)
?????*?@param???返回的數(shù)據(jù)類型
?????*?@return?響應(yīng)結(jié)果
?????*/

????public?static??ResponseResult?OK(T?data)?{
????????return?packageObject(data,?GlobalCodeEnum.GL_SUCC_0);
????}

????/**
?????*?自定義系統(tǒng)異常信息
?????*
?????*?@param?code
?????*?@param?message?自定義消息
?????*?@param?
?????*?@return
?????*/

????public?static??ResponseResult?systemException(Integer?code,?String?message)?{
????????return?packageObject(null,?code,?message);
????}
}


當(dāng)然,這樣的統(tǒng)一報文格式也不僅僅只處理異常返回,正常的數(shù)據(jù)報文格式也可以通過該對象來進(jìn)行統(tǒng)一封裝!


本文內(nèi)容從實用的角度給大家演示了,如何在日常工作中編寫通用的數(shù)據(jù)校驗邏輯,希望能對大家有所幫助,如果覺得還不錯,可以給點支持,轉(zhuǎn)發(fā)+在看!感謝閱讀!



—————END—————


瀏覽 47
點贊
評論
收藏
分享

手機掃一掃分享

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

手機掃一掃分享

分享
舉報

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 日韩午夜剧场| 大香蕉伊人青青草| 18禁黄网站| 国产精品欧美7777777| 老熟女搡BBBB搡BBBB视频| 欧美性受XXXX黑人XYX性爽| 六月激情婷婷| 最近中文字幕在线| 羽月希奶水饱胀在线播放| 久热在线资源福利站| 久草视频在线播放| 亚洲无码精品在线| 亚洲一区二区在线视频| 波多野结衣在线观看一区二区 | 亚洲黄色AV| 免费毛片网址| 青青草在线观看视频| 青青草婷婷| 亚洲免费一区二区| 一级a一级a爰片免费| 99热热热| 麻豆一级片| 波多野结衣一二三区| 中国操B视频| 亚洲69| 日本欧美在线观看| 美女免费网站| 精品一区二区三区在线观看| 国产三级在线免费观看| 国产性色AV| www.色色网| 国产精品黑人ThePorn| 成人国产精品在线观看| 精品夜夜澡人妻无码AV| 日韩精品视频在线| 久久这里只有| 91在线无码精品秘入口动作| 在线观看欧美日韩| 亚洲日本视频| 久肏| 一级无码视频| caopeng97| 蜜臀久久99精品久久久久酒店更新时间 | 日韩欧美性爱网站| 狠狠躁日日躁夜夜躁A片视频| 99国产视频| 日韩另类| 爽好紧别夹喷水欧美| 亚洲久操| 麻豆中文字幕| 一级A片免费观看| 久久午夜视频| 婷婷丁香激情| 18国产免费视频在线观看| 亚洲激情四射| 人人爽人人| 欧美日韩国产精品成人| 日韩av中文字幕在线| 日韩成人网站在线观看| 久久99国产乱子伦...| 91精品国产一区二区| 亚洲乱码一区二区三区| 蜜桃传媒一区二区亚洲A| 精品成人在线观看| 久久久123| 九九99精品视频| 先锋资源日韩| 午夜爱爱免费视频| 国产又粗又长又硬又大毛苴茸图片 | 欧美91视频| 天天色粽合合合合合合合| 亚洲国产欧美在线| 日本黄色A片免费看| 久久精品人人| 蜜桃视频app| 亚欧精品久久久| 青青草91在线| 91香蕉视频免费| 免费观看一区| 国产黄片一区二区三区| 三级在线网| 2024国产精品| 亚洲日韩免费| 青青草成人在线观看| 秋霞一区二区| 国产精品久久久久久久久久久久久久久| www.亚洲视频| 免费18禁网站| 国产精品免费人成人网站酒店| 欧美夜夜骑| 九九精品视频在线播放| 最新国产视频| 九色国产视频| 亲子乱一区二区三区视频| 97A片在线观看播放| 中文字幕在线观看免费高清电影| 污网站免费在线观看| 青青草无码| 伊人久久大香| 日韩福利视频| 伊人激情| 中文字幕高清无码免费视频| 日韩无码黄色片| 囯产伦精一区二区三区四区| 无码av网| 欧美色图色就是色| 欧美MV日韩MV国产网站| 日本韩国欧美18| 东方av在线播放| 精品久久一区二区三区四区| 韩日AV| 强开小嫩苞一区二区电影| 大香蕉久热| 北条麻妃91| 成人AV免费在线观看| 国产一级无码| 91精品婷婷国产综合久久韩漫| 日本天堂Tv视频在线观看| 天天操免费| 成人黄网在线观看| 久久综合伊人7777777| 婷婷成人在线| 操屄在线观看| 亚洲AV无码精品久久一区二区 | 国产suv精品一区二区6| 99欧美| 德美日三级片在线观看| 极品少妇视频| 亚洲天堂网2025| 狠狠色噜噜狠狠狠888| 欧洲三级网观看| 日韩熟妇视频| 97日韩| 七十路の高齡熟妇无码| 永久免费黄色| 日韩在线一区二区| 色色色成人视频| 大香蕉伊人免费| 香蕉在线播放| 国产精品一色哟哟哟| 日韩视频中文| 综合色播| 九九热精品在线视频| 久久青草视频| 日韩肏屄视频在线观看| 日韩在线大香蕉| 伊人久久五月| 一级a免一级a做免费线看内裤的注意事项 | 丰满少妇一级片| a片免费网址| 国产黄色自拍| 日韩色色网| 免费看v片| 日韩一区二区三区在线| 中文字幕++中文字幕明步| 黄色片免费视频网站| 婷婷精品秘进入| 超碰在线人人爱| 国产av一区二区三区四区| 少妇白洁视频| 日本免费黄色片| 成人性生活视频| 亚洲人在线观看| 日韩无码三级视频| 成人免费乱码大片a毛片蜜芽| 综合久久亚洲| 十八禁在线播放| 性BBwBBwBBwBBw禽| 男人av网站| 香蕉视频a| 亚洲AV无码秘翔田| 影音先锋AV在线资源| H片在线免费观看| 一区二区av| 欧美aaaaaa| 国产精品午夜在线| 亚洲狼友视频| 超碰97久久| 成人自拍偷拍视频| 日韩无码精品AV| 天天日天天噜| 处破女初破全过免费看| 99超碰在线观看| 伊人亚洲| JlZZJLZZJlZZ亚洲女人17| 欧美黄网站在线观看| 国产探花在线观看| 91精品国产麻豆国产自产在线| 美女做爱网站| 成人在线91| 成人A片视频| 青娱乐偷窥成| 欧美中文字| 中文字幕在线观看二区| 亚洲AV动漫| www.操逼| 西西444WWW无码大胆在线观看| 青青草原在线视频免费观看| 在线看片A| 五月综合色| 精品无码一区二区三区四区久久久软件| 日B视频网站| 色网站操逼| 色婷婷在线视频观看| 人人干人人草| 99在线精品视频在线观看| 日本一级黄| 国产AV资源网| 日韩人妻无码专区| 日本三级黄色视频| 国产熟睡乱子伦午夜视频_第1集| 丰满人妻无码| 五月丁香五月婷婷| 亚洲AV无码成人精品久久久| www.AV在线| 亚洲AV成人无码精品直播在线| 亚洲视频第一页| 无码不卡一区| 日韩三级网| 日韩毛片网| 国产一卡二卡| 精品无人区无码乱码毛片国产 | h片免费观看| 亚洲中字幕新| 亚洲精品福利视频导航| 91丝袜一区在线观看| 操b在线| 中文无码精品欧美日韩| 日韩在线网址| 激情视频国产| 亚洲婷婷三级成人网| 五月丁香婷婷在线观看| 美女大香蕉| 亚洲热视频| 大香伊人国产| 久草视频免费看| 99人妻人人爽人人添人人精品| 翔田千里无码流出两部| 亚洲一级黄色大片| 日韩小视频在线观看| 国产高清视频| 人人摸人人爱人人操| 一级内射视频| 黄网站免费观看| 美女十八禁| 四虎AV在线| 欧美精品久久久久久| 国产黄色片网站| 伊人免费在线| 免费看一级一级人妻片| 熟女啪啪| 免费无码一级A片大黄在线观看| 欧美在线综合| 三级网址大全| 三浦恵子一级婬片A片| 大香蕉精品视频| 九九中文字幕| 亚洲观看黄色网| 无码AV一区二区| 国产叼嘿视频| 四川BBB嫩BBBB爽BBBB| 久久综合五月| 午夜大黄片| 日韩无码视频网站| www在线| 亚洲无码A区| 极品美鮑20p| 91无码精品一区二区| 夜夜bb| 精品亚洲无码视频| 51无码| 一本道精品在线| 亚洲日韩视频在线| 亚洲日韩乱码在线| 国产aaaaaa| 久久精品三级| 欧美精品国产动漫| 成年人在线观看视频网站| 91久久爽久久爽爽久久片| 成人毛片视频网站| 91网站免费观看| 国精品无码人妻一区二区三区免费 | 五月六月丁香激情视频| 91超碰在线播放| 暖暖爱视频免费| 午夜福利h| 欧美日韩爱爱| 色999网址| 成人在线网址| 99久久精品国产一区色| 性爱AV网| 乱伦无码视频| 亚洲精品国产精品乱码视99 | 黄色电影视频在线| 偷拍一区二区| 国产精品一区二区AV日韩在线 | 神马影院午夜福利| AV大香蕉| 欧美成人无码一区二区三区| 人人妻人人澡人人爽人人欧美一区| 大香焦伊人国产| 密臀AV在线| 国产欧美综合视频一区二区在线| jlzzzjlzzz国产免费观看| 日本午夜视频| 热re99久久精品国产99热| 天天综合网久久综合网| 美女视频黄a视频全免费不卡| 极品av| 91人妻成人精品一区二区| 免费国产黄色视频网站| 精品99视频| 五月婷婷中文版| x88AV吊钟奶熟女| 四虎影院中文字幕| 国产女主播在线| 青青操逼| 69视频在线播放| 俺去俺来也www色视频| 亚洲成人AV| 嫩BBB搡BBB槡BBB小号| 亚洲欧美激情小说另类| 无码免费视频观看| 99精品偷自拍| 亚洲中文字幕在线看| 奶大丰满一乱一视频一区二区三区在| 91人妻人人澡人人爽精品| 婷婷久久五月天| 波多野结衣国产区42部| 激情五月天成人| 你懂的在线免费观看| 久久男女| 成人性爱视频免费在线观看| a视频免费在线观看| 作爱免费视频| 国产日韩在线视频| 黑人AV在线播放| 精品国产欧美一区二区三区成人| 欧美成人性爱网址| 成年人黄色视频在线观看| 亚州毛多色色精品| 亚洲视频在线免费看| 操逼无码| 狼人综合在线| 操逼逼一区二区三区| 97人人色| 丝瓜视频污APP| 天堂网AV在线| 中文字幕系列| 一区二区三区四区在线播放| 国内一级A片| 操少妇逼| 亚洲AV色香蕉一区二区三区| 尤物精品| 免费AV播放| 超碰人人摸| 很很撸在线视频| 三级片麻豆| 欧美成人在线免费| 91色婷婷综合久久中文字幕二区| 自慰在线观看网站| 91资源在线| 日韩一区二区无码视频| 国产第四页| 国内精品久久久久久久久久| 无码不卡视频| 开心五月激情网| 操逼视频,黄色大全| 免费观看黄色视频网站| 操逼逼AV| 亚洲精品久久久久久久久豆丁网| 人人插人人澡| 2018最好看的中文字幕高清电影 | 亚洲小电影在线观看| 久久亚洲av| 欧美一级性爱在线观看| 四川少扫搡BBw搡BBBB| 欧美一级黃色A片免费看蜜桃熟了 一级a一级a免费观看免免黄‘/ | 国产无码区| 午夜成人无码视频| 日韩黄色小说| 少妇人妻av| 无码天堂| 撒尿BBw搡BBwBBw| 11孩岁女精品A片BBB| 色婷婷在线无码精品秘人口传媒 | 国产高清无码免费视频| 国产一级a毛一级a做免费高清视频 | 欧美性爱小说| 超碰伊人大香蕉| 火淫玖玖免费精品| 91久久久久国产一区二区| 在线免费AV片| 久操视频在线播放| 九九久久精品视频| 超碰97免费| 成人爱爱免费视频| 日本四级片| 91小视频在线观看| 黄色av网站免费| 精品偷拍| 亚洲精选中文字幕| 苍井空无码一区二区三区| 日韩免费观看视频| 色噜噜狠狠一区二区三区| 成人做爰A片AAA毛真人| 一区二区三区四区五区| 国内成人精品网站| www四虎com| 国产精品一区二区AV日韩在线 | 久久久久成人片免费观看蜜芽| 天天爱av| 欧美成人图片视频在线| 波多野结衣高清无码视频| 欧美a∨| 久久精品视频在线观看| 国产A级片| 精品看片| 操BBBB| 另类欧美| 黄频免费观看| 粉嫩av懂色av蜜臀av分享| 天天日天天噜| 看毛片网站| 人妻人人骑| 亚洲精品成人无码熟妇在线| 女人的天堂av| 成人网站欧美| 青娱乐成人网| 午夜性视频| 99久久久无码国产精品性波多| 国产vA| 亚洲成人福利| 天天色粽合合合合合合合| 999reav| 成人亚洲视频| 狼友视频免费在线观看| 国产美女自拍| 男女做爱视频网站| 少婦揉BBBB揉BBBB揉| 99国产视频| 日韩欧美视频一区| 日韩人妻系列| 久久精彩偷拍视频| 91热在线| 青青草在线观看视频| 成人小说视频在线社区| 中文字幕不卡在线| 日韩欧美亚洲一区二区三区| 日本人人操人人摸| 无码人妻一区二区三区免费n鬼沢| 香蕉视频日韩| 亚洲黄色天堂| 自拍偷拍在线视频| 国产成人精品无码| 久久综合加勒比| 国产又粗又大| 九九精品视频在线观看| av手机天堂网| 亚洲中文字幕久久日| 日本免费视频| 亚洲男同Gay一区二区| 瘦精品无码一区二区三区四区五区六区七区八区 | 婷婷激情视频| 99资源站| 内射精品| 欧美成人免费电影| 超碰97人人爱| 国产成人电影免费在线观看| 无码人妻精品一区二区三| 亚洲激情自拍| 成人性生活影视av| 特级特黄AAAAAAAA片| 一级a一级a爰片免费| 综综综综合网| 亚洲三级视频| 欧美a在线观看| 爆乳乱伦| 一区二区三区小视频| 国产欧美熟妇另类久久久| 91九色首页| 天堂色播| 日韩无码专区电影| 亚洲精品资源| 亚洲A片V一区二区三区| 欧美国产另类| 日韩gay| 色片视频| 狼友视频首页| 国产精品免费一区二区三区四区视频| 99热免费| 日韩中文字幕不卡| 日韩成人无码免费视频| 欧美熟妇擦BBBB擦BBBB| 黄色操逼网站?| 午夜成人在线观看| 青青草原视频在线| 国产精品做爱| 国产黄h| 国产理论电影| 亚洲最大黄色视频| 高清无码在线免费视频| 日日骚中文字幕| 欧美丰满人妻免费视频人| 99久久婷婷国产精品2020| 91爱搞在线| 伊人综合久久| 欧美一级在线| 99九九久久| 日本一级婬片免费放| 亚洲国产成人精品女人久久| 成人在线免费观看国产| 高清国产mv在线观看| 日韩三级AV| 韩国无码视频在线观看| 婷婷成人小说| 欧美成人精品无码| 十八禁免费网站| 婷婷综合亚洲| 国产成人h| 亚洲天堂av在线免费观看| 日本操B| 亚洲精品国产精品国自产曰本| 先锋影音资源AV| 国产3p绿帽骚妻视频| 国产換妻4P视频| 强伦轩农村人妻| 三级视频网| 亚洲成人无码网站| 亚洲高清无码中字| 亚洲激情精品| 亚洲午夜福利| 日本午夜福利电影| 日韩欧美国产精品| 久草视频福利在线| 亚洲无码高清免费| 欧美操逼免费视频| a在线| 日韩色网站| 黄色视频在线网站| 九色PORNY国产成人| 国产性播放| 国产一级a毛一级a毛片视频黑人| 一区二区三区视频在线观看| 黄片一区二区三区| 俺去也在线视频| 国产成人777777精品综合| 成人影片在线观看18| 色呦呦一欧美| 六月色婷婷| 羽月希无码| 午夜精品影院| 九九韩剧网最新电视剧免费观看 | 中文字幕四区| 成人小视频在线| 国产成人无码精免费视频| 欧美操日本| 黑人AV七| 国产九九| 中文在线字幕电视剧免费平台| 日韩a级毛片| 国产农村妇女精品一二区| 蜜桃影院| 超碰997| 免费人成年激情视频在线观看| 中文字幕的| 亚洲视频播放| 欧美日本在线观看| 日本一区二区三区在线播放| 亚洲成人av无码| 中文字幕在线无码视频| 久草视频免费在线播放| avcom无码| 国产激情自拍| 国产乱子伦一区二区三精品| 欧美女人操逼| 日本九九视频| 国产手机精品视频| 人人摸人人看人人草| 嘿咻嘿咻动态图| 亚洲小电影在线观看| 99热精品免费在线观看| 熟女探花| 日日夜夜精品视频| 少妇嫩搡BBBB搡BBBB| 一区二区成人电影| 粉嫩av懂色av蜜臀av熟妇| 波多野结衣一二三区| 国产色拍| 日韩AA片| 97免费在线视频| 涩久久久| 日韩免费福利视频| 亚洲欧洲在线观看| 国产毛片在线| 免费A级毛片在线播放不收费| 三级高清无码| 亚洲视频中文字幕在线观看| A视频免费观看| 亚洲精品伊人| 成年人免费视频在线观看| 啊啊啊啊啊靠逼| 国产又爽又黄视频| 高潮91PORN蝌蚪九色| 激情网站免费| 亚洲国产成人va| 亚洲精品中文字幕在线| 日本三级网站| 亚洲操逼图| 超碰AV在线| 国产91无码精品秘入口新欢| 激情综合婷婷| 99精品免费| 高清无码在线不卡| 久热福利视频| 婷婷精品国产一区二区三区日韩| 91无码人妻精品一区二区蜜桃| 国产成人精品久久| 成人做爰黄片视频免费| 色婷在线| 久久青草免费视频| 免费观看在线黄片| 一本之道DVD不卡视频| 青娱乐成人在线视频| 中文字幕无码A片久久| 国产亚洲99久久精品| 久久国产热在8| 伊人春色网| 亚洲Japanese办公室制服| 青娱乐极品久久| 蜜桃91精品秘入口| 操逼大片| 操逼视频网| 色婷婷视频在线观看| 成人三区| 亚洲一区二区三区无码| 爱搞视频在线观看| 久久精品福利| 亚洲精品区| 婷婷五月丁香六月| 北条麻妃视频在线观看| 婷婷在线播放| 日本黄色免费视频| 亚洲精品视频在线| 无码内射视频| 亚洲日本中文字幕| 丰满人妻一区二区三区| 国产福利小视频| 亚洲色图偷拍| 欧美肏屄视频| 先锋影音资源站| 日韩高清无码免费| 人人摸人人干| 一本大道香蕉av久久精东影业 | 国产操穴视频| 亚洲va在线∨a天堂va欧美va| 神马午夜av| 丁香六月操| 強暴人妻一区二区三区| 操人| 91人妻一区二区三区无不码超满 | 国精产品一区二区三区黑人和中国| 51妺嘿嘿午夜福利| 在线观看高清无码视频| 日韩无码一级| 亚洲天堂在线免费观看| 爱爱打炮影院| 欧美视频一区| 欧美国产日韩另类| 奇米四色秒播| 国产精品久久久久国产A级 | 成人一区在线观看| 少妇搡BBBB搡BBB搡HD(| 俺去俺来也www色官网黑人| anwuye官方网站| 中文字幕国产精品| 韩国精品一区二区三区| 青草精品| 欧美午夜网站| 日朝无码| 亚洲视频第一页| 日本无码一区二区三三| 亚洲无码中文字幕在线观看| 三级乱伦86丝袜无码| 欧美日韩国产不卡视频| 亚洲高清无码播放| 激情婷婷亚洲| 免费看黄色A片| 国产A∨| 夜夜骚av.一区二区三区四区| 在线aaa| 天天爱综合| 亚洲高清无码一区二区三区| 91女人18片女毛片60分钟 | 蜜桃精品一区二区三区美女| 国产一级操逼| 亚洲国产成人精品激情在线| 成人一区二区三区四区五区| 欧美视频自拍| 日本国产欧美| 三级网站网址| 天天添| 亚洲无码一本道| 一级特黄大片录像i| 婷婷啪啪| 热逼视频| 91大神免费在线观看| 国产一级性爱视频| 好看的中文字幕av| 伊人色五月天| 大香蕉免费网站| 91丨牛牛丨国产| 69精品无码成人久久久久久| 一道本一区| 四川w搡BBB搡wBBB搡| 午夜精品久久久久久久99老熟妇| 一道本一区二区三区免费视频| 秋霞日韩| 97在线免费| 51精品日本| 无码无码无码| 成人精品毛片| 国产一区二区三区免费| 97国产视频| 91双飞会所双飞在线| 无码精品人妻一区二区| 大香蕉大香蕉免费网| 亚洲秘无码一区二区三区| 久草性爱| 成人毛片在线播放| 西西特级无码444www| 一区二区亚洲| 国产做受精品网站在线观看| 婷婷五月天成人社区| www,久久久| 新版欧美内射大全| 免费一级A毛片夜夜看| 欧美精品一二三| 亚洲无码高清在线观看| 日本一节片在线播放| 青青草国产在线视频| 在线观看小视频| 亚洲人成人无码一区二区三区| 亚洲三级片在线| 高清无码视频在线免费观看| 人人色人人| 黄色带亚州| 久久视频这里有精品| 91碰| 欧美黄色成人网站| 午夜成人在线观看| 国产福利小视频| 亚洲第一色在线| 国产精品免费久久| 摸BBB搡BBB搡BBBB| 99久在线精品99re8| 老熟女露脸25分钟91秒| 麻豆一区二区三区| 99大香蕉视频| 天天艹天天| 黄视频免费| 日韩中文字幕人妻| 操碰97| 最近中文字幕在线视频| 超碰91人人操| 97人人澡| 91人妻人人澡人人爽人人精| 久久成人免费| 最近中文字幕高清2019中文字幕| 亚洲中文字幕无码爆乳av| 久草欧美| 亚洲中文字幕在线看| 成人在线视频播放| 天天影视综合网免费观看电视剧国产 | 欧美久久精品| 在线中文字幕视频| 一本到在线观看午夜剧场| 精品人人操| 99国产在线观看免费视频| 另类老妇奶BBBBwBB| 日韩免费一级片| 五月伊人婷婷| 人妻熟女在线视频| 少妇高潮喷水| 亚洲欧美性爱视频| 青草福利视频| 91N视频| 日逼黄色视频| 欧美在线免费观看| 亚洲天堂偷拍| 欧美熟女性爱视频| 视色AV| 国产精品视频网站| 色五月婷婷中文字幕| 综合影院| 加勒比国产在线| 俺来也俺去也www色官网| 日韩人妻精品无码制服| ⅴA日本成人| 亚洲福利社| 亚洲精品久久久久久久久蜜桃| 久久精品大香蕉| 久久v| 中文字幕一级片| 亚洲三级片无码| 日本高清一区| 蜜桃秘一二三区最新| 俺去也av| 黄片无遮挡| 丁香五月天视频| AV影院在线| 青草久久网| 精品久久成人| 国产又黄又爽| 欧美成人五月天| 成人网站www污污污网站公司 | 超碰在线天天干| 玖玖在线| 国产精品99久久免费黑人人妻 | 国产成人久久精品麻豆二区| 日本在线观看| 中文字幕色情| 91精品久久久久久综合五月天| 免费无码一级A片大黄在线观看| 人妻无码电影推荐| 成人视频免费观看18| 加勒比久久88| 人人摸人人操人人干| 久久精品大香蕉| 新亚洲天堂男子Av-| 欧美一区二区三区在线播放| 一本色道久久综合无码| 五月天激情影院| 欧美性爱操逼视频| 久久综合无码内射国产| 亚洲无码一区二区三| 大荫蒂视频另类XX| 久色伊人| 久久精品国产AV一区二区三区 | 亚洲三级黄色视频| 欧美一区二区在线| 四川BBB搡BBB爽爽爽欧美| 黄色片国产| 国产91白丝在一线播放| 欧美黄片AAA| 东京热一区二区三区四区| 嗯啊av| 少妇被躁到高潮无码| 亚洲天堂视频网站| 日本中文字幕在线播放| 婷婷色网| 4388亚洲最大| 草B视频| 日本无码在线| 免费看国产黄色| 日韩黄片免费看| 青草福利视频| 国产乱色精品成人免费视频| 九九精品视频在线播放| 国产日批| 爱爱爱爱网| 18禁黄色免费网站| 亚洲狼人| 在线观看中文字幕一区| 影音先锋av中文字幕| 成人黄色在线| 五月天无码免费视频| 婷婷色在线播放| 欧洲天堂在线视频网站| 亚洲天堂无| 免费看的毛片| 九九视屏| 三级内射| 欧美在线黄色| 五月天丁香婷婷视频| 黑人猛躁白人BBBBBBBBB| 伊人网综合| 无码激情18激情视频| 久久AV秘一区二区三区水生| 人人摸人人干| 欧美精品A片| 黄色小网站在线观看| 欧美怕怕怕| 大香蕉网伊人在线| 西西888WWW大胆无码| 婷婷精品秘进入| 国产小视频在线播放| 高清无码一区| 婷婷五月天色综合| 黄色小网站在线观看| 亚洲成人中文字幕在线| 大香蕉免费在线观看| 久久久久久久久久久高清毛片一级| 欧美老女人逼| 亚洲a网| 色mm在线播放| 99操逼网| 神马午夜51| 无套内射在线播放| AV在线免费观看网址|