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

Spring Boot 實(shí)現(xiàn)各種參數(shù)校驗(yàn),寫得太好了,建議收藏!

共 7774字,需瀏覽 16分鐘

 ·

2021-11-28 16:28

關(guān)注公眾號,學(xué)習(xí)更多 Java 干貨!

作者:伍陸七
來源:juejin.cn/post/6856541106626363399

本文會(huì)詳細(xì)介紹Spring Validation各種場景下的最佳實(shí)踐及其實(shí)現(xiàn)原理,死磕到底!

項(xiàng)目源碼:spring-validation(https://github.com/chentianming11/spring-validation)

簡單使用

Java API規(guī)范(JSR303)定義了Bean校驗(yàn)的標(biāo)準(zhǔn)validation-api,但沒有提供實(shí)現(xiàn)。hibernate validation是對這個(gè)規(guī)范的實(shí)現(xiàn),并增加了校驗(yàn)注解如@Email@Length等。

Spring Validation是對hibernate validation的二次封裝,用于支持spring mvc參數(shù)自動(dòng)校驗(yàn)。接下來,我們以spring-boot項(xiàng)目為例,介紹Spring Validation的使用。

引入依賴

如果spring-boot版本小于2.3.x,spring-boot-starter-web會(huì)自動(dòng)傳入hibernate-validator依賴。如果spring-boot版本大于2.3.x,則需要手動(dòng)引入依賴:


????org.hibernate
????hibernate-validator
????6.0.1.Final

推薦一個(gè) Spring Boot 基礎(chǔ)教程及實(shí)戰(zhàn)示例: https://github.com/javastacks/spring-boot-best-practice

對于web服務(wù)來說,為防止非法參數(shù)對業(yè)務(wù)造成影響,在Controller層一定要做參數(shù)校驗(yàn)的!大部分情況下,請求參數(shù)分為如下兩種形式:

  1. POSTPUT請求,使用requestBody傳遞參數(shù);
  2. GET請求,使用requestParam/PathVariable傳遞參數(shù)。

下面我們簡單介紹下requestBodyrequestParam/PathVariable的參數(shù)校驗(yàn)實(shí)戰(zhàn)!

requestBody參數(shù)校驗(yàn)

POST、PUT請求一般會(huì)使用requestBody傳遞參數(shù),這種情況下,后端使用DTO對象進(jìn)行接收。只要給DTO對象加上@Validated注解就能實(shí)現(xiàn)自動(dòng)參數(shù)校驗(yàn)。

比如,有一個(gè)保存User的接口,要求userName長度是2-10,accountpassword字段長度是6-20。如果校驗(yàn)失敗,會(huì)拋出MethodArgumentNotValidException異常,Spring默認(rèn)會(huì)將其轉(zhuǎn)為400(Bad Request)請求。

DTO表示數(shù)據(jù)傳輸對象(Data Transfer Object),用于服務(wù)器和客戶端之間交互傳輸使用的。在spring-web項(xiàng)目中可以表示用于接收請求參數(shù)的Bean對象。

  • DTO字段上聲明約束注解
@Data
public?class?UserDTO?{

????private?Long?userId;

????@NotNull
????@Length(min?=?2,?max?=?10)
????private?String?userName;

????@NotNull
????@Length(min?=?6,?max?=?20)
????private?String?account;

????@NotNull
????@Length(min?=?6,?max?=?20)
????private?String?password;
}
  • 在方法參數(shù)上聲明校驗(yàn)注解
@PostMapping("/save")
public?Result?saveUser(@RequestBody?@Validated?UserDTO?userDTO)?{
????//?校驗(yàn)通過,才會(huì)執(zhí)行業(yè)務(wù)邏輯處理
????return?Result.ok();
}

這種情況下,使用@Valid@Validated都可以。

requestParam/PathVariable參數(shù)校驗(yàn)

GET請求一般會(huì)使用requestParam/PathVariable傳參。如果參數(shù)比較多(比如超過6個(gè)),還是推薦使用DTO對象接收。否則,推薦將一個(gè)個(gè)參數(shù)平鋪到方法入?yún)⒅小?/p>

在這種情況下,必須在Controller類上標(biāo)注@Validated注解,并在入?yún)⑸下暶骷s束注解(如@Min等)。如果校驗(yàn)失敗,會(huì)拋出ConstraintViolationException異常。

代碼示例如下:

@RequestMapping("/api/user")
@RestController
@Validated
public?class?UserController?{
????//?路徑變量
????@GetMapping("{userId}")
????public?Result?detail(@PathVariable("userId")?@Min(10000000000000000L)?Long?userId)?{
????????//?校驗(yàn)通過,才會(huì)執(zhí)行業(yè)務(wù)邏輯處理
????????UserDTO?userDTO?=?new?UserDTO();
????????userDTO.setUserId(userId);
????????userDTO.setAccount("11111111111111111");
????????userDTO.setUserName("xixi");
????????userDTO.setAccount("11111111111111111");
????????return?Result.ok(userDTO);
????}

????//?查詢參數(shù)
????@GetMapping("getByAccount")
????public?Result?getByAccount(@Length(min?=?6,?max?=?20)?@NotNull?String??account)?{
????????//?校驗(yàn)通過,才會(huì)執(zhí)行業(yè)務(wù)邏輯處理
????????UserDTO?userDTO?=?new?UserDTO();
????????userDTO.setUserId(10000000000000003L);
????????userDTO.setAccount(account);
????????userDTO.setUserName("xixi");
????????userDTO.setAccount("11111111111111111");
????????return?Result.ok(userDTO);
????}
}

統(tǒng)一異常處理

前面說過,如果校驗(yàn)失敗,會(huì)拋出MethodArgumentNotValidException或者ConstraintViolationException異常。在實(shí)際項(xiàng)目開發(fā)中,通常會(huì)用統(tǒng)一異常處理來返回一個(gè)更友好的提示。

比如我們系統(tǒng)要求無論發(fā)送什么異常,http的狀態(tài)碼必須返回200,由業(yè)務(wù)碼去區(qū)分系統(tǒng)的異常情況。

@RestControllerAdvice
public?class?CommonExceptionHandler?{

????@ExceptionHandler({MethodArgumentNotValidException.class})
????@ResponseStatus(HttpStatus.OK)
????@ResponseBody
????public?Result?handleMethodArgumentNotValidException(MethodArgumentNotValidException?ex)?{
????????BindingResult?bindingResult?=?ex.getBindingResult();
????????StringBuilder?sb?=?new?StringBuilder("校驗(yàn)失敗:");
????????for?(FieldError?fieldError?:?bindingResult.getFieldErrors())?{
????????????sb.append(fieldError.getField()).append(":").append(fieldError.getDefaultMessage()).append(",?");
????????}
????????String?msg?=?sb.toString();
???????return?Result.fail(BusinessCode.參數(shù)校驗(yàn)失敗,?msg);
????}

????@ExceptionHandler({ConstraintViolationException.class})
????@ResponseStatus(HttpStatus.OK)
????@ResponseBody
????public?Result?handleConstraintViolationException(ConstraintViolationException?ex)?{
????????return?Result.fail(BusinessCode.參數(shù)校驗(yàn)失敗,?ex.getMessage());
????}
}

進(jìn)階使用

分組校驗(yàn)

在實(shí)際項(xiàng)目中,可能多個(gè)方法需要使用同一個(gè)DTO類來接收參數(shù),而不同方法的校驗(yàn)規(guī)則很可能是不一樣的。這個(gè)時(shí)候,簡單地在DTO類的字段上加約束注解無法解決這個(gè)問題。

關(guān)注公眾號,學(xué)習(xí)更多 Java 干貨!

因此,spring-validation支持了分組校驗(yàn)的功能,專門用來解決這類問題。還是上面的例子,比如保存User的時(shí)候,UserId是可空的,但是更新User的時(shí)候,UserId的值必須>=10000000000000000L;其它字段的校驗(yàn)規(guī)則在兩種情況下一樣。這個(gè)時(shí)候使用分組校驗(yàn)的代碼示例如下:

  • 約束注解上聲明適用的分組信息groups
@Data
public?class?UserDTO?{

????@Min(value?=?10000000000000000L,?groups?=?Update.class)
????private?Long?userId;

????@NotNull(groups?=?{Save.class,?Update.class})
????@Length(min?=?2,?max?=?10,?groups?=?{Save.class,?Update.class})
????private?String?userName;

????@NotNull(groups?=?{Save.class,?Update.class})
????@Length(min?=?6,?max?=?20,?groups?=?{Save.class,?Update.class})
????private?String?account;

????@NotNull(groups?=?{Save.class,?Update.class})
????@Length(min?=?6,?max?=?20,?groups?=?{Save.class,?Update.class})
????private?String?password;

????/**
?????*?保存的時(shí)候校驗(yàn)分組
?????*/
????public?interface?Save?{
????}

????/**
?????*?更新的時(shí)候校驗(yàn)分組
?????*/
????public?interface?Update?{
????}
}
  • @Validated注解上指定校驗(yàn)分組
@PostMapping("/save")
public?Result?saveUser(@RequestBody?@Validated(UserDTO.Save.class)?UserDTO?userDTO)?{
????//?校驗(yàn)通過,才會(huì)執(zhí)行業(yè)務(wù)邏輯處理
????return?Result.ok();
}

@PostMapping("/update")
public?Result?updateUser(@RequestBody?@Validated(UserDTO.Update.class)?UserDTO?userDTO)?{
????//?校驗(yàn)通過,才會(huì)執(zhí)行業(yè)務(wù)邏輯處理
????return?Result.ok();
}

嵌套校驗(yàn)

前面的示例中,DTO類里面的字段都是基本數(shù)據(jù)類型String類型。但是實(shí)際場景中,有可能某個(gè)字段也是一個(gè)對象,這種情況先,可以使用嵌套校驗(yàn)。Spring Boot 學(xué)習(xí)筆記這個(gè)分享給你。

比如,上面保存User信息的時(shí)候同時(shí)還帶有Job信息。需要注意的是,此時(shí)DTO類的對應(yīng)字段必須標(biāo)記@Valid注解。

@Data
public?class?UserDTO?{

????@Min(value?=?10000000000000000L,?groups?=?Update.class)
????private?Long?userId;

????@NotNull(groups?=?{Save.class,?Update.class})
????@Length(min?=?2,?max?=?10,?groups?=?{Save.class,?Update.class})
????private?String?userName;

????@NotNull(groups?=?{Save.class,?Update.class})
????@Length(min?=?6,?max?=?20,?groups?=?{Save.class,?Update.class})
????private?String?account;

????@NotNull(groups?=?{Save.class,?Update.class})
????@Length(min?=?6,?max?=?20,?groups?=?{Save.class,?Update.class})
????private?String?password;

????@NotNull(groups?=?{Save.class,?Update.class})
????@Valid
????private?Job?job;

????@Data
????public?static?class?Job?{

????????@Min(value?=?1,?groups?=?Update.class)
????????private?Long?jobId;

????????@NotNull(groups?=?{Save.class,?Update.class})
????????@Length(min?=?2,?max?=?10,?groups?=?{Save.class,?Update.class})
????????private?String?jobName;

????????@NotNull(groups?=?{Save.class,?Update.class})
????????@Length(min?=?2,?max?=?10,?groups?=?{Save.class,?Update.class})
????????private?String?position;
????}

????/**
?????*?保存的時(shí)候校驗(yàn)分組
?????*/
????public?interface?Save?{
????}

????/**
?????*?更新的時(shí)候校驗(yàn)分組
?????*/
????public?interface?Update?{
????}
}

嵌套校驗(yàn)可以結(jié)合分組校驗(yàn)一起使用。還有就是嵌套集合校驗(yàn)會(huì)對集合里面的每一項(xiàng)都進(jìn)行校驗(yàn),例如List字段會(huì)對這個(gè)list里面的每一個(gè)Job對象都進(jìn)行校驗(yàn)。

集合校驗(yàn)

如果請求體直接傳遞了json數(shù)組給后臺,并希望對數(shù)組中的每一項(xiàng)都進(jìn)行參數(shù)校驗(yàn)。此時(shí),如果我們直接使用java.util.Collection下的list或者set來接收數(shù)據(jù),參數(shù)校驗(yàn)并不會(huì)生效!我們可以使用自定義list集合來接收參數(shù):

  • 包裝List類型,并聲明@Valid注解
public?class?ValidationList?implements?List?{

????@Delegate?//?@Delegate是lombok注解
????@Valid?//?一定要加@Valid注解
????public?List?list?=?new?ArrayList<>();

????//?一定要記得重寫toString方法
????@Override
????public?String?toString()?{
????????return?list.toString();
????}
}

@Delegate注解受lombok版本限制,1.18.6以上版本可支持。如果校驗(yàn)不通過,會(huì)拋出NotReadablePropertyException,同樣可以使用統(tǒng)一異常進(jìn)行處理。

比如,我們需要一次性保存多個(gè)User對象,Controller層的方法可以這么寫:

@PostMapping("/saveList")
public?Result?saveList(@RequestBody?@Validated(UserDTO.Save.class)?ValidationList?userList)?{
????//?校驗(yàn)通過,才會(huì)執(zhí)行業(yè)務(wù)邏輯處理
????return?Result.ok();
}

推薦一個(gè) Spring Boot 基礎(chǔ)教程及實(shí)戰(zhàn)示例: https://github.com/javastacks/spring-boot-best-practice

自定義校驗(yàn)

業(yè)務(wù)需求總是比框架提供的這些簡單校驗(yàn)要復(fù)雜的多,我們可以自定義校驗(yàn)來滿足我們的需求。自定義spring validation非常簡單,假設(shè)我們自定義加密id(由數(shù)字或者a-f的字母組成,32-256長度)校驗(yàn),主要分為兩步:

  • 自定義約束注解
@Target({METHOD,?FIELD,?ANNOTATION_TYPE,?CONSTRUCTOR,?PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy?=?{EncryptIdValidator.class})
public?@interface?EncryptId?{

????//?默認(rèn)錯(cuò)誤消息
????String?message()?default?"加密id格式錯(cuò)誤";

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

????//?負(fù)載
????Class[]?payload()?default?{};
}
  • 實(shí)現(xiàn)ConstraintValidator接口編寫約束校驗(yàn)器
public?class?EncryptIdValidator?implements?ConstraintValidator?{

????private?static?final?Pattern?PATTERN?=?Pattern.compile("^[a-f\\d]{32,256}$");

????@Override
????public?boolean?isValid(String?value,?ConstraintValidatorContext?context)?{
????????//?不為null才進(jìn)行校驗(yàn)
????????if?(value?!=?null)?{
????????????Matcher?matcher?=?PATTERN.matcher(value);
????????????return?matcher.find();
????????}
????????return?true;
????}
}

這樣我們就可以使用@EncryptId進(jìn)行參數(shù)校驗(yàn)了!最新面試題整理好了,點(diǎn)擊Java面試庫小程序在線刷題。

編程式校驗(yàn)

上面的示例都是基于注解來實(shí)現(xiàn)自動(dòng)校驗(yàn)的,在某些情況下,我們可能希望以編程方式調(diào)用驗(yàn)證。這個(gè)時(shí)候可以注入javax.validation.Validator對象,然后再調(diào)用其api

@Autowired
private?javax.validation.Validator?globalValidator;

//?編程式校驗(yàn)
@PostMapping("/saveWithCodingValidate")
public?Result?saveWithCodingValidate(@RequestBody?UserDTO?userDTO)?{
????Set>?validate?=?globalValidator.validate(userDTO,?UserDTO.Save.class);
????//?如果校驗(yàn)通過,validate為空;否則,validate包含未校驗(yàn)通過項(xiàng)
????if?(validate.isEmpty())?{
????????//?校驗(yàn)通過,才會(huì)執(zhí)行業(yè)務(wù)邏輯處理

????}?else?{
????????for?(ConstraintViolation?userDTOConstraintViolation?:?validate)?{
????????????//?校驗(yàn)失敗,做其它邏輯
????????????System.out.println(userDTOConstraintViolation);
????????}
????}
????return?Result.ok();
}

快速失敗(Fail Fast)

Spring Validation默認(rèn)會(huì)校驗(yàn)完所有字段,然后才拋出異常??梢酝ㄟ^一些簡單的配置,開啟Fali Fast模式,一旦校驗(yàn)失敗就立即返回。

@Bean
public?Validator?validator()?{
????ValidatorFactory?validatorFactory?=?Validation.byProvider(HibernateValidator.class)
????????????.configure()
????????????//?快速失敗模式
????????????.failFast(true)
????????????.buildValidatorFactory();
????return?validatorFactory.getValidator();
}

@Valid@Validated區(qū)別

區(qū)別@Valid@Validated
提供者JSR-303規(guī)范Spring
是否支持分組不支持支持
標(biāo)注位置METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USETYPE, METHOD, PARAMETER
嵌套校驗(yàn)支持不支持

實(shí)現(xiàn)原理

requestBody參數(shù)校驗(yàn)實(shí)現(xiàn)原理

spring-mvc中,RequestResponseBodyMethodProcessor是用于解析@RequestBody標(biāo)注的參數(shù)以及處理@ResponseBody標(biāo)注方法的返回值的。顯然,執(zhí)行參數(shù)校驗(yàn)的邏輯肯定就在解析參數(shù)的方法resolveArgument()中:

關(guān)注公眾號,學(xué)習(xí)更多 Java 干貨!

public?class?RequestResponseBodyMethodProcessor?extends?AbstractMessageConverterMethodProcessor?{
????@Override
????public?Object?resolveArgument(MethodParameter?parameter,?@Nullable?ModelAndViewContainer?mavContainer,
??????????????????????????????????NativeWebRequest?webRequest,?@Nullable?WebDataBinderFactory?binderFactory)?throws?Exception?{

????????parameter?=?parameter.nestedIfOptional();
????????//將請求數(shù)據(jù)封裝到DTO對象中
????????Object?arg?=?readWithMessageConverters(webRequest,?parameter,?parameter.getNestedGenericParameterType());
????????String?name?=?Conventions.getVariableNameForParameter(parameter);

????????if?(binderFactory?!=?null)?{
????????????WebDataBinder?binder?=?binderFactory.createBinder(webRequest,?arg,?name);
????????????if?(arg?!=?null)?{
????????????????//?執(zhí)行數(shù)據(jù)校驗(yàn)
????????????????validateIfApplicable(binder,?parameter);
????????????????if?(binder.getBindingResult().hasErrors()?&&?isBindExceptionRequired(binder,?parameter))?{
????????????????????throw?new?MethodArgumentNotValidException(parameter,?binder.getBindingResult());
????????????????}
????????????}
????????????if?(mavContainer?!=?null)?{
????????????????mavContainer.addAttribute(BindingResult.MODEL_KEY_PREFIX?+?name,?binder.getBindingResult());
????????????}
????????}
????????return?adaptArgumentIfNecessary(arg,?parameter);
????}
}

可以看到,resolveArgument()調(diào)用了validateIfApplicable()進(jìn)行參數(shù)校驗(yàn)。

protected?void?validateIfApplicable(WebDataBinder?binder,?MethodParameter?parameter)?{
????//?獲取參數(shù)注解,比如@RequestBody、@Valid、@Validated
????Annotation[]?annotations?=?parameter.getParameterAnnotations();
????for?(Annotation?ann?:?annotations)?{
????????//?先嘗試獲取@Validated注解
????????Validated?validatedAnn?=?AnnotationUtils.getAnnotation(ann,?Validated.class);
????????//如果直接標(biāo)注了@Validated,那么直接開啟校驗(yàn)。
????????//如果沒有,那么判斷參數(shù)前是否有Valid起頭的注解。
????????if?(validatedAnn?!=?null?||?ann.annotationType().getSimpleName().startsWith("Valid"))?{
????????????Object?hints?=?(validatedAnn?!=?null???validatedAnn.value()?:?AnnotationUtils.getValue(ann));
????????????Object[]?validationHints?=?(hints?instanceof?Object[]???(Object[])?hints?:?new?Object[]?{hints});
????????????//執(zhí)行校驗(yàn)
????????????binder.validate(validationHints);
????????????break;
????????}
????}
}

看到這里,大家應(yīng)該能明白為什么這種場景下@Validated@Valid兩個(gè)注解可以混用。我們接下來繼續(xù)看WebDataBinder.validate()實(shí)現(xiàn)。

@Override
public?void?validate(Object?target,?Errors?errors,?Object...?validationHints)?{
????if?(this.targetValidator?!=?null)?{
????????processConstraintViolations(
????????????//此處調(diào)用Hibernate?Validator執(zhí)行真正的校驗(yàn)
????????????this.targetValidator.validate(target,?asValidationGroups(validationHints)),?errors);
????}
}

最終發(fā)現(xiàn)底層最終還是調(diào)用了Hibernate Validator進(jìn)行真正的校驗(yàn)處理。

方法級別的參數(shù)校驗(yàn)實(shí)現(xiàn)原理

上面提到的將參數(shù)一個(gè)個(gè)平鋪到方法參數(shù)中,然后在每個(gè)參數(shù)前面聲明約束注解的校驗(yàn)方式,就是方法級別的參數(shù)校驗(yàn)。實(shí)際上,這種方式可用于任何Spring Bean的方法上,比如Controller/Service等。

其底層實(shí)現(xiàn)原理就是AOP,具體來說是通過MethodValidationPostProcessor動(dòng)態(tài)注冊AOP切面,然后使用MethodValidationInterceptor對切點(diǎn)方法織入增強(qiáng)。

public?class?MethodValidationPostProcessor?extends?AbstractBeanFactoryAwareAdvisingPostProcessorimplements?InitializingBean?{
????@Override
????public?void?afterPropertiesSet()?{
????????//為所有`@Validated`標(biāo)注的Bean創(chuàng)建切面
????????Pointcut?pointcut?=?new?AnnotationMatchingPointcut(this.validatedAnnotationType,?true);
????????//創(chuàng)建Advisor進(jìn)行增強(qiáng)
????????this.advisor?=?new?DefaultPointcutAdvisor(pointcut,?createMethodValidationAdvice(this.validator));
????}

????//創(chuàng)建Advice,本質(zhì)就是一個(gè)方法攔截器
????protected?Advice?createMethodValidationAdvice(@Nullable?Validator?validator)?{
????????return?(validator?!=?null???new?MethodValidationInterceptor(validator)?:?new?MethodValidationInterceptor());
????}
}

接著看一下MethodValidationInterceptor

public?class?MethodValidationInterceptor?implements?MethodInterceptor?{
????@Override
????public?Object?invoke(MethodInvocation?invocation)?throws?Throwable?{
????????//無需增強(qiáng)的方法,直接跳過
????????if?(isFactoryBeanMetadataMethod(invocation.getMethod()))?{
????????????return?invocation.proceed();
????????}
????????//獲取分組信息
????????Class[]?groups?=?determineValidationGroups(invocation);
????????ExecutableValidator?execVal?=?this.validator.forExecutables();
????????Method?methodToValidate?=?invocation.getMethod();
????????Set>?result;
????????try?{
????????????//方法入?yún)⑿r?yàn),最終還是委托給Hibernate?Validator來校驗(yàn)
????????????result?=?execVal.validateParameters(
????????????????invocation.getThis(),?methodToValidate,?invocation.getArguments(),?groups);
????????}
????????catch?(IllegalArgumentException?ex)?{
????????????...
????????}
????????//有異常直接拋出
????????if?(!result.isEmpty())?{
????????????throw?new?ConstraintViolationException(result);
????????}
????????//真正的方法調(diào)用
????????Object?returnValue?=?invocation.proceed();
????????//對返回值做校驗(yàn),最終還是委托給Hibernate?Validator來校驗(yàn)
????????result?=?execVal.validateReturnValue(invocation.getThis(),?methodToValidate,?returnValue,?groups);
????????//有異常直接拋出
????????if?(!result.isEmpty())?{
????????????throw?new?ConstraintViolationException(result);
????????}
????????return?returnValue;
????}
}

實(shí)際上,不管是requestBody參數(shù)校驗(yàn)還是方法級別的校驗(yàn),最終都是調(diào)用Hibernate Validator執(zhí)行校驗(yàn),Spring Validation只是做了一層封裝。


(完)


PS:如果覺得我的分享不錯(cuò),歡迎大家隨手點(diǎn)贊、在看。

?關(guān)注公眾號:Java后端編程,回復(fù)下面關(guān)鍵字?


要Java學(xué)習(xí)完整路線,回復(fù)??路線?

缺Java入門視頻,回復(fù)?視頻?

要Java面試經(jīng)驗(yàn),回復(fù)??面試?

缺Java項(xiàng)目,回復(fù):?項(xiàng)目?

進(jìn)Java粉絲群:?加群?


PS:如果覺得我的分享不錯(cuò),歡迎大家隨手點(diǎn)贊、在看。

(完)




加我"微信"?獲取一份 最新Java面試題資料

請備注:666,不然不通過~


最近好文


1、Kafka 3.0重磅發(fā)布,棄用 Java 8 的支持!

2、你只會(huì)用 ! = null 判空?嘿嘿!

3、這次,Swagger-ui遇到對手了!

4、上午寫了一段代碼,下午就被開除了...

5、抖音項(xiàng)目Semi Design涉嫌抄襲?技術(shù)團(tuán)隊(duì)發(fā)文致歉!



最近面試BAT,整理一份面試資料Java面試BAT通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。
獲取方式:關(guān)注公眾號并回復(fù)?java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
明天見(??ω??)??
瀏覽 40
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

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

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 午夜福利码一区二区| 亚洲欧美激情视频| 在线观看国产免费视频| 欧美亚洲日韩一区二区三区| 国产一级AV免费观看| 精品精品视频| 欧美操逼视频| 熟妇人妻中文字幕无码老熟妇| 91黄色在线观看| 黄色av免费网站| 日本精品在线观看视频| 日本人人操人人摸| 在线大香蕉| 日韩激情毛片| 人人妻人人要| 成人免费乱码大片a毛片蜜芽| 日本少妇激情视频| 丝袜制服中文字幕无码专区| 强伦轩一区二区三区四区播放方式 | 色人阁人妻中文字幕| 成人在线视频免费| 少妇搡BBBB搡BBB搡造水爽| 成人AV三级片| 人人看人人澡| 一区二区av在线| 十八禁网站在线| 东京热免费视频| 中文字幕乱视频| 不卡视频一区二区| 91av久久| 国产欧美岛国| 欧美色图在线观看视频| 国产成人毛片18女人18精品| 欧美一在线一综合| 中文无码av| 人人澡人人澡人人澡| 亚洲色综合久久五月| 吹潮喷水高潮HD| 精品无码9| 国产女人18毛片水真多18| 人人狠狠综合婷婷| 无码超碰| 在线无码AV| av资源网站| 男人av在线| 亚洲欧美国产高清vA在线播放| 一区二区三区四区无码在线| 国产人妻人伦精品1国产丝袜| 少妇在厨房| 一区二区三区日韩| 99在线观看免费视频| 欧美八区| 日韩黄片免费看| 日韩成人黄色| 亚洲成人777| 大香蕉偷拍视频| 精品国产免费无码久久噜噜噜AV | 91视频美女内射| 国产一级免费视频| 日本www色| 97人人爽| 国产在线拍揄自揄拍无码网站新闻| 亚洲性天堂| 亚洲v区| 最近日本中文字幕中文翻译歌词 | 粉嫩av懂色av蜜臀av熟妇| 熟女人妻在线| 91中文字幕网| 中文字幕一级A片高清免| 精品多人P群无码视频| 国产g蝌蚪| 青青草东路热vv| 亚洲性爱在线| 91在线视频播放| 国产suv精品一区二区6| 中国熟妇XXXX18| 98国产精品| 免费无码进口视频| 成人国产AV精| 深爱五月激情网| 色五月婷婷基地| 久久久久97| 四川BBB搡BBB爽爽爽电影| 51妺嘿嘿午夜福利视频| 啪啪视频在线观看| 亚欧精品久久久| 99久久人妻无码中文字幕系列| 国产欧美第一页| 亚洲欧美高清视频| 久久午夜无码鲁丝午夜精品| 成人免费无码A片免费| 麻豆videos| 亚洲精品性爱| 黄色777| 亚洲vs天堂vs成人vs无码| 亚洲无码A片在线观看APP| A片网| 色五月激情| 国产激情在线视频| 欧美成人综合| 欧美日韩高清| 天堂在线视频| 成人片成人网久久蜜桃臀| 国产av资源| 日韩一级黄片| 日本成人视频在线免费播放| 男女啪网| 在线中文字幕777| 草逼美女| 亚洲欧美精品AAAAAA片| 一区无码视频| 午夜av免费| 波多野结衣中文字幕久久| 一级无码A片| 2025天天操夜夜操| 国产又黄又大又粗的视频| 国产精品探花熟女| 国产99久久久精品| 午夜福利日本| 日本中文字幕在线免费观看| 精品成人在线观看| 国产69精品久久| av久操| 国产女人高潮毛片| 精品亚洲一区二区三区四区五区 | 三级成人无码| 日韩黄片视频| 安徽妇女BBBWBBBwm| 黄色片视频网站| 波多野结衣黄色| 亚洲中文字幕在线观看视频| Al激情欧美| 久久成人A片| 91精品国产人妻| 无码人妻精品一区二区三区温州| 国产91嫩草乱婬A片2蜜臀| 国产一级黄色大片| 在线观看精品视频| 色777网站| 无码人妻在线播放| 亚洲在线一区| 国产AV黄片| 国产成人亚洲综合A∨婷婷| 日韩超碰在线| 日韩激情| 91在线观看视频| 91爱爱com| 肏逼在线观看| 午夜无码精品| 国产成人777777精品综合| 色黄网站在线观看| 自拍偷拍网址| 一级一级一级做a免费一级做a| 五月婷中文字幕| 做爱网站免费| 无码中文字幕在线观看| 中文字幕操逼网站| 丁香五月一区二区| 97色色视频| 人人草人人舔| 国产jizz| 国产尤物视频| 无码人妻精品一区二区三千菊电影| 99热66| 中文字幕+乱码+中文乱码91| 天堂A片电影网站在线观看| 亚洲成人怡红院| 国产91www| 91在线无码精品秘入口电车 | www.久久久久| 日韩视频免费| 在线观看免费黄色视频| 69成人精品视频| 亚洲天堂久久久| 欧美三级网址| 精品www| 爱操逼综合网| 国产成人AⅤ| 日本精品视频| 亚洲中文视频免费| 欧美精品久久久久久久久| 亚洲精品久久久久毛片A级绿茶| 亚洲av自拍| 中文字幕视频网站| h片在线| 黄片网站在线观看| 日韩电影免费在线观看| 国产精品被狂躁到高潮| 最新中文字幕av| 欧美日韩国产在线播放| 乌克兰毛片| 色男人的天堂| 青青草手机视频在线| 亚洲免费观看在线观看| 中文字幕精品视频在线观看| 伊人成年网| 欧美熟妇精品一级A片视色| 亚洲天堂自拍| 淫色综合网| 91红桃视频| 亚洲色欲av| 成人无码日韩| 无码v| 最美孕交vivoestv另类| 人妻丰满熟妇av无码| 日韩一区二区三区精品| 蜜桃视频一区二区三区四区使用方法 | 日韩操逼逼| 日韩中文字幕一区| 91成人情欲影视网| 小黄片在线免费观看| 日本精品视频一区二区| 男人的天堂社区| 人人爱人人射| 少妇精品无码一区二区免费视频| 亚洲精品福利视频导航| 久久亚洲AV成人无码国产野外| 日本成人高清视频| 蜜桃91精品秘成人取精库| 日韩天天干| 欧美大鸡| 99精品视频免费在线观看| 久操欧美| 先锋影音资源av| 青草av在| 99热高清| 成人黄色视频网站在线观看| 91久久国产综合| 天天澡天天爽日日AV| 色情片在线播放| 亚洲天堂网在线观看视频| 日韩AV在线免费| 高清无码在线观看视频| 国产精品三级在线| 五月丁香欧美综合| 91蜜桃精品| 99久久99| www.seses| 北条麻妃一区二区三区在线播放| 亚洲av免费在线| 亚洲无线观看| 亚洲无码一区二区在线| 特一级黄色视频| 性无码一区二区| 亚洲精品乱码久久久久| 天天草网| 色婷婷精品视频| 国产在线小电影| 中文字幕在线观看a| 亚洲av小说| 国产伊人在线| 中文字幕伊人| 超碰在线免费播放| 久热视频在线| 亚洲成人性爱网| 熊猫视频91| 精品在线播放视频| 久久永久视频| 人妻无码中文字幕免费视频蜜桃| 亚洲精品视频在线观看免费 | 婷婷综合五月| 久久国产大奶| 中文字幕免费av| AV日韩无码| 亚洲AV成人片无码网站| AV观看免费| 精品美女视频在线观看免费软件 | 中文字幕日本欧美| 九九热这里有精品| 亭亭五月丁香| 综合导航无码| 中文字幕第一页av| 东方AV在线播放| 天美果冻麻豆国产一区| 大香蕉色视频| 无码av中文字幕| 午夜黄片| 亚洲av网站在线观看| 成人精品无码免费视频| 日韩人妻无码精品| 久久久久久久艹| 亚洲图片欧美另类| 人人妻人人澡人人爽久久con| 欧美日韩高清丝袜| 久久噜噜噜精品国产亚洲综合| 无码免费视频| 亚洲有码在线视频| 亚洲小说区图片区| 国产精品久久久一区二区三区| 午夜人妻AV| 国产高清一区二区| 麻豆一区视频| 久久久久99精品成人片三人毛片 | 亚洲69v久久久无码精品| 91AV| 久久精品免费看| 91A视频| 熟女一区二区| 在线观看中文字幕视频| 亚洲成人影片在线观看| 大香蕉啪啪| 欧美v在线观看| 亚洲最新中文字幕| 五月天色色婷婷| 久操网在线| 九九精品热| 国产女人18| 三级av无码| 欧美色色色| 国产无码高清在线| 日本少妇高潮| 1024手机在线观看| 亚洲视频一区二区三区四区娇小视频在线观看视频 | 日韩在线中文字幕亚洲| 天天中文字幕| 国产视频久久久| 先锋成人电影| 俺也去网| A片地址| 午夜成人精品| 上海熟搡BBB搡BBBB| 亚洲精品二| 日本人人操| 99久久国产视频| 黄片99| 国产45页| 日本操B视频| 人人操人妻| av影音先锋在线| 国精品伦一区一区三区有限公司 | 97精品人妻一区二区三区香蕉| 亚洲精品国产精品国自产在线| 青青热久| 亚洲va视频| 三级理论片| 午夜AV在线免费观看| 久久精品一区二区| 国产小视频在线免费观看| av日韩无码| 婷色五月| 国产精品国产三级国产专业不| 免费看欧美成人A片| 精品无码视频在线观看| 翔田千里无码| 亚洲三级毛片| 日韩国产在线| 超碰2023| 日韩黄色大片| 久久一二三| 黃色一级A片一級片| 欧美一区二区精品| 思思热99| 五月丁香色色| 91在线无码精品秘蜜桃入口| 欧美A级黄片| 69成人无码| 成人免费福利| 久久草大香蕉| 久久午夜福利视频| 亚洲成人大香蕉| 成人免费黄| 男人av在线| 国产精品HongKong麻豆| 蜜桃91精品入口| 一级操逼黄色视频| 久久熟女嫩草成人片免费| 亚洲高清无码在线观看| 久久婷婷成人综合色怡春院| 91视频一区| 综合亚洲视频| 久操网站| 在线观看成人18| 高清无码在线视频| 乱子伦国产精品视频一级毛| 免费超碰| 久热在线精品视频| 国产免费一区二区三区网站免费| 加勒比日韩| 四虎2025在线51| 18禁无码永久免费网站大全| 激情性爱婷婷色五月| 亚洲成人内射| 做爱视频网站18| 亚洲国产熟妇无码日韩| 婷婷五月999| 九九热国产视频| 五月天亚洲无码| 91欧美日韩综合| 无码人妻av一区| 影音先锋成人av| 强行征服邻居人妻HD高清日本| 日本AⅤ在线| 高清无码一级片| 亚洲免费在线观看视频| 女人18片毛片90分钟免费明星| 中文字幕三区| 三级片视频在线观看| 亚洲任你操超碰在线| 伦理被部长侵犯HD中字| 亚洲综合免费观看高清完整| 亚洲秘无码一区二区三区蜜桃中文 | 97人妻| 亚洲成人综合网站| 日韩欧美日本| 欧美午夜在线| 成人AV一AV二| 国产性爱AV| 欧美老女人操逼视频| 青草网| 久久久久久久久久国产| 可以免费观看的AV| 免费精品视频| 在线播放一区二区三区| 天天看天天操| 日韩一区二区不卡| 免费做爱视频网站| 亚洲日韩视频在线| 欧美足交视频| 水蜜桃视频网| 黄色视频在线免费观看网站| 丁香婷婷色五月激情综合三级三级片欧美日韩国| 日本A片免费观看| 久久理论电影| 日本黄色小视频| 成人视频A片| 女生自慰在线观看| 日韩伊人网| 成人性爱自拍| 污污污www精品国产网站| 人妻黑人一区二区三区| 日本东京热视频| 黄片在线免费播放| 日韩美女在线视频| 7799精品视频| 免费国产黄色视频| 精品免费囯产| 国产精品一区在线| 无码人妻久久一区二区三区蜜桃| 中文字幕在线观看第一页| 日本A片免费观看| 爱爱天堂| 天天射日日干| 内射婷婷| 成人久久AV| 4438成人网| 亚洲人成电影网| 欧美性久久久久| 91成人| 欧美性猛交ⅩXXX乱大交| 91精品国产成人观看| 成人午夜啪免费视频在线观看软件 | 影音先锋无码AV| 五月天国产精品| 乱伦激情视频| 国产91人| 免费网站观看www在线观看| 97超碰网| 亚洲成人性爱| 久久99网站| 一区二区三区四区日韩| 中文字幕永久免费| 亚洲精品午夜| 日韩和的一区二区| 五月综合久久| 亚洲无码免费播放| 香蕉大综合| 综合无码| 日韩三级久久| AV天堂手机| 成人在线一区二区| A天堂视频| 亚洲一二期视频| 久久久久久AV| 蜜桃系列一区二区精品| 91精品酒店视频| 波多野结衣AV在线播放| 91网站在线播放| 99久久婷婷国产综合精品青牛牛| 国产久久久久久久| 久久成人网豆花视频| 亚洲V在线观看| 人人妻人人澡人人爽人人DVD | 91资源在线观看| 牛牛在线精品视频| 在线一级A片| 99综合在线| 天堂婷婷| 老司机精品视频在线观看| 亚洲免费三级片| 天天爱天天爽| 国产福利在线导航| 日韩在线免费视频| 日本内射网站| 亚洲天堂在线免费| 少妇BBBBBB| 精品国产乱码久久久久久郑州公司| aaaaaa在线观看免费高清| 日韩中文无码一级A片| 日韩一区二区三区视频| 四色永久成人网站| 日韩午夜片| 国产嫩草久久久一二三久久免费观看| 99色在线| Av黄色| 亚洲经典免费视频| a视频在线观看| 免费A网站| 国产精品美女在线观看| 91色视频在线观看| 人妻免费视频| 日本中文字幕不卡| 日韩无码你懂的| 肏亚洲美女| 亚洲三级片在线视频| ww毛片| 色呦呦视频| 久草视频在线播放| 亚洲一区AV| 97AV人妻无码视频二区| 日本在线不卡视频| 人人操人人| 俺来也俺就去www色情网| 亚洲在线第一页| 黄色网页免费观看| 国产三级片网站| 国产精品V| 久久久久久91| 婷婷五月综合激情| 亚洲日韩乱码在线| 99久久婷婷国产综合精品电影 | 在线无码视频播放| 久草视频免费看| 69成人国产| 99re欧美激情| 白浆av| 欧美伊人大香蕉| 亚洲精品在线视频观看| 亚洲偷拍中文| 中国老熟妇| 日韩黄色小视频| 天天超碰| 草草影院第一页YYCCC| 俺来了俺去也| 日韩中文在线观看| 国产又爽又黄在线看视频| 影音先锋久久久| A视频免费| 日韩一级一片内射视频4K| 欧美去干网| 成人动漫一区二区| 久久香蕉网站| 欧美色图视频在线观看| 欧美黄色激情视频网站| 婷婷激情四射| 国产成人大片| 91国产乱伦| 亚洲精品高清视频| av少妇| 亚洲精品电影| 精品少妇人妻| 国产豆花视频| 国产激情在线观看视频| 中文字幕特黄A片| 女人特级毛片18| 唐山熟女工棚嗷嗷叫| 亚洲精品成人视频| 六月激情网| 狠狠狠狠狠狠狠狠狠狠| 中国少妇xxx| 大乳奶一级婬片A片| 人人操AV| 久久久久久性爱| 91中文字幕在线播放| 黄色视频免费观看国产| 亚洲一二区| 欧美狠狠干| 特级西西444www高清| 搡中国东北老女人视频| 国产性爱自拍视频| 变态另类av| 蜜柚Av| 婷婷开心色四房播播在线| 18禁在线| 亚洲无aV在线中文字幕| 久久久91精品国产一区苍井空| 91porn在线观看| 成人福利视频在线| 中文字幕日韩无码片| 五月天干美女| 国产美女操逼| 一级黄色电影网| 在线观看国产一区| 少妇bbb搡bbbb搡bbbb| 中文无码一区二区三区四区| 欧美日韩中文在线观看| 成人国产片女人爽到高潮| 黄色视频网站在线观看| 亚洲精品福利| 亚洲欧美日韩综合| 亚洲国产熟妇无码日韩| 狼人一区二区| japanese在线观看| 人人操人人上| 五月丁香婷婷久久| 亚洲成人福利在线| 亚洲群交| 日韩人妻无码视频| 97操碰| 亚洲乱伦视频| 艳妇乳肉豪妇荡乳AV无码福利| 日韩免费黄色视频| 五月天黄色片| 在线观看国产一级片| 婷婷在线观看免费| 国产精品特级毛片| 天堂成人在线视频| 嫩草视频在线观看| 91视频一区二区三区| 伊人久久免费视频| 国产主播在线播放| 精品少妇一区| 福利逼站| 天天爽天天爽夜夜爽毛片| 色情小电影免费网站观看网址在线播| 蜜臀久久99精品久久久久久宅男 | 91在线一区二区| 亚洲无码字幕| 丁香五月婷婷五月天| 色色播| 大香蕉国产在线视频| 成人黄网站免费视频| 成人AV午夜福利| 91伊人久热精品| 乱伦91视频| 91丨豆花丨国产极品| 欧洲肥胖BBBBBBBBBB| 九九草影院| 国产一级婬女AAAA片季秀英| 99在线免费观看视频| 国产精品一级片| 水蜜桃一区| 岛国无码在线观看| 国产精品一卡| 五月婷中文字幕| 2025国产成人精品一区| 干老女人视频| 911香蕉视频| 国产精品高潮呻吟久久| 国产一级a毛一级a毛视频在线网站?| 一区二区无码av| 亚洲秘无码一区二区三区电影| 亚洲高清无码视频大全| 亚洲福利在线免费观看| 青青操天天干| 国产字幕在线观看| 三级无码视频在线观看| 中文字幕特黄A片| 欧美XXXXBBBB| 嫩BBB槡BBBB槡BBB小号| 丁香婷婷五月综合影院| 日日免费视频| 91羞射短视频在线观看| 成人黄色网址| 99成人乱码一区二区三区在线| 久操综合视频在线| 一本大道香蕉av久久精东影业| 逼特逼| 在线观看无码| 又a又黄高清无码视频| 无码高清| 欧美操逼视频| 日本三级片视频不卡| 人妻少妇av中文字幕乱码牛牛| 色婷婷视频| 国产欧美一区在线看| 巨乳国产一区| 中文字幕乱伦性爱| 中文字幕系列| 操屄视频播放| 色色色999| 国产一毛a一毛a在线观看| 伊人网在线免费视频| 老妇bbw| 国产精品亚洲一区| 桃色Av| 亚洲第一黄| 久草在在线| 在线免费观看成人视频| 日韩专区中文字幕| 狠狠热视频| 91大神在线看| 少妇4p| 久久久久成人精品无码| 成人AV十八亚洲二区| 亚洲日韩中文在线| 亚洲春色一区二区三区| 青青操网站| 操少妇视频| 日韩欧美爱爱| 国产精品成人AV片| 啪啪免费网站| 91操操| 人人操在线| 短发半推半就AV| 黄色777| 呦呦av| 免费AV网站在线| 日韩高清无码免费观看| 伊人成人免费视频| 国产精品天天| 日韩区一中文字幕a∨| 欧美VA视频| 日韩在线中文字幕视频| 免费看黄片,在线观看| 东方成人av| 国产女18毛片多18精品| 午夜黄色| 国产成人电影免费在线观看| 成人123区| 欧美后门菊门交4| 大香蕉AV电影| 少妇搡BBBB搡BBB搡小说| 日韩久久高清| 日产电影一区二区三区| 毛片h| 国产精品人妻AⅤ在线看| 青春草在线| 超碰在线观看97| 婷婷在线视频| 久久99高清视频| 精品无码一区二区三区四区五区| 少妇人妻一级A毛片| www黄色片| 人人看人人摸人人草| 国产精品一级a毛一级a| 亚洲成人观看| 亚洲狼人综合| 日韩免费av| 亚洲福利在线观看| 婷婷激情五月天丁香| 午夜无码福利视频| 三级成人免费| 艹逼在线观看| 欧美又大又粗| 国产h视频在线观看| 久久久麻豆| 亚洲综合免费观看高清完整版在线| 影音先锋AV成人| 国产日韩一区二区三免费高清| 丰滿人妻-区二区三区| 91福利视频在线观看| 日本内射在线观看| 成人在线精品| 国产成人无码A片V99| 爱精品视频| 操国产美女| 亚洲色图自拍| 久操视频免费在线观看| 中文字幕免费在线播放| 成人欧美| 天天干天天干天天| 天天想天天干| 色噜噜狠狠一区二区三区| 免费在线观看黄片视频| 精品国产成人a在线观看| 日本乱伦中文字幕| 免费无码国产在线53| 一区二区免费视频| 婷婷五月18永久免费视频| 成人欧美一区二区三区在线观看 | 国产精品777| 亚洲天堂人妻少妇| 日韩精品黄片| 日韩人妻在线播放| 围内精品久久久久久久久久‘变脸 | 午夜天堂精品久久久| 一级片视频在线观看| 国产三级片在线视频| 成人视频网站在线观看| 91日日| 亚洲AV无码成人精品区www| 翔田千里无码AV在线观看| 色屁屁草草影院ccyycom| 91人人在线| 高清国产AV| 久久国产黄色一级片| 成人三级视频在线| 高清无码免费观看视频| 欧美中文字幕在线播放| 大香蕉伊人av| 狠狠久久| 无码人妻精品一区二区三区温州 | 精品一区二区三区无码| 蜜臀久久99精品久久久久久婷婷 | 国产ts在线观看| 欧美一区二区三区成人片下载| 人妻精品一区二区三区| 国产一级A片| 天天射天天干天天| 国产精品久久久久久久9999| 五月丁香亭亭| 巜人妻初尝按摩师BD中字| 成人小说视频在线社区| 国产aaaaaaaaaaaaa| 一本色道久久无码人妻精品69| 视频一区二区三区在线观看| 亚洲图片欧美色图| 性做久久久久久| 国产精品国产三级囯产普通话2 | www亚洲视频| 69AV在线播放| 国产乱子伦-区二区三区| 妖精视频黄色| 国产免费性爱| 色五月婷婷在线| 98色色| 在线观看视频日韩| 国产成人精品久久二区二区91| 九九精品视频在线观看| 色色亚洲| 99极品视频| 日韩无码高清免费| 午夜福利91| 亚洲成人A片| www99国产| 日本黄色a片| 苍井空一区二区三区| 中文字幕在线免费观看视频| 国产AV大香蕉| 日中国老太太B| 一本大道DVD中文字幕| 日日干夜夜撸| 中文字幕AV免费观看| 国产av资源网| www.五月婷婷| 99精品一区| 成人精品一区二区无码| 大香蕉伊人AV| 婷婷久久五月| 天天干网址| 国产av网站大全| 韩国一级av| 嫩草视频在线观看免费网站| 夜夜撸天天操| 思思热视频在线观看| 国产乱子伦-区二区三区| 女人的天堂网| 无码AV动漫| 专区无日本视频高清8| 1024黄| 亚洲中文偷拍| 精品视频免费| 国产精品色| 曰韩精品| 日本特黄| 亚洲无码在线免费观看| 在线A片免费观看| 丰满人妻一区二区三区免费| 男女内射视频| 日韩欧美日本| 天啪| 精品一区二区视频| 欧美国产成人在线| 亚洲69v久久久无码精品| 精品乱子伦一区二区三区免费播成| 国产三级片在线观看| 天天爽夜夜爽夜夜爽| 大陆一级片| 色色婷婷五月天| 日韩综合精品| 成人激情综合| 天天肏| 黄色视频免费观看国产| 日本特黄AA片免费视频| 一本道无码在线| 9一区二区三区| 777视频在线观看| www.色婷婷| 亚洲高清无码一区二区| 亚洲成人娱乐网| 操老女人视频| 69乱伦视频| 国产A片免费| 五月天激情午夜福利| 色射爱| 羽月希无码| 国产欧美激情| 大香蕉国产在线视频| 制服丝袜乱伦| 成人在线视频一区| 婷婷国产精品| 日韩欧美在线播放| 艹在线观看| 五月婷亚洲精品AV天堂| 天堂A片电影网站在线观看| 91插插插插| 91爱爱网| 激情无码五月天| 毛片操逼| 国产欧美在线|