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

Controller層代碼就該這么寫(xiě),簡(jiǎn)潔又優(yōu)雅!

共 30745字,需瀏覽 62分鐘

 ·

2023-05-10 10:19

    

您好,我是路人,更多優(yōu)質(zhì)文章見(jiàn)個(gè)人博客:http://itsoku.com

來(lái)源:juejin.cn/post/ 7123091045071454238
  • 一個(gè)優(yōu)秀的 Controller 層邏輯
  • 從現(xiàn)狀看問(wèn)題
  • 改造 Controller 層邏輯
    • 統(tǒng)一返回結(jié)構(gòu)
    • 統(tǒng)一包裝處理
    • 參數(shù)校驗(yàn)
    • 自定義異常與統(tǒng)一攔截異常
  • 總結(jié)

一個(gè)優(yōu)秀的 Controller 層邏輯

說(shuō)到 Controller,相信大家都不陌生,它可以很方便地對(duì)外提供數(shù)據(jù)接口。它的定位,我認(rèn)為是「不可或缺的配角」。

說(shuō)它不可或缺是因?yàn)闊o(wú)論是傳統(tǒng)的三層架構(gòu)還是現(xiàn)在的 COLA 架構(gòu),Controller 層依舊有一席之地,說(shuō)明他的必要性。

說(shuō)它是配角是因?yàn)?Controller 層的代碼一般是不負(fù)責(zé)具體的邏輯業(yè)務(wù)邏輯實(shí)現(xiàn),但是它負(fù)責(zé)接收和響應(yīng)請(qǐng)求。

從現(xiàn)狀看問(wèn)題

Controller 主要的工作有以下幾項(xiàng):

  • 接收請(qǐng)求并解析參數(shù)
  • 調(diào)用 Service 執(zhí)行具體的業(yè)務(wù)代碼(可能包含參數(shù)校驗(yàn))
  • 捕獲業(yè)務(wù)邏輯異常做出反饋
  • 業(yè)務(wù)邏輯執(zhí)行成功做出響應(yīng)
      
      //DTO
@Data
public class TestDTO {
    private Integer num;
    private String type;
}


//Service
@Service
public class TestService {

    public Double service(TestDTO testDTO) throws Exception {
        if (testDTO.getNum() <= 0) {
            throw new Exception("輸入的數(shù)字需要大于0");
        }
        if (testDTO.getType().equals("square")) {
            return Math.pow(testDTO.getNum(), 2);
        }
        if (testDTO.getType().equals("factorial")) {
            double result = 1;
            int num = testDTO.getNum();
            while (num > 1) {
                result = result * num;
                num -= 1;
            }
            return result;
        }
        throw new Exception("未識(shí)別的算法");
    }
}


//Controller
@RestController
public class TestController {

    private TestService testService;

    @PostMapping("/test")
    public Double test(@RequestBody TestDTO testDTO) {
        try {
            Double result = this.testService.service(testDTO);
            return result;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Autowired
    public DTOid setTestService(TestService testService) {
        this.testService = testService;
    }
}

如果真的按照上面所列的工作項(xiàng)來(lái)開(kāi)發(fā) Controller 代碼會(huì)有幾個(gè)問(wèn)題:

  • 參數(shù)校驗(yàn)過(guò)多地耦合了業(yè)務(wù)代碼,違背單一職責(zé)原則
  • 可能在多個(gè)業(yè)務(wù)中都拋出同一個(gè)異常,導(dǎo)致代碼重復(fù)
  • 各種異常反饋和成功響應(yīng)格式不統(tǒng)一,接口對(duì)接不友好

改造 Controller 層邏輯

統(tǒng)一返回結(jié)構(gòu)

統(tǒng)一返回值類型無(wú)論項(xiàng)目前后端是否分離都是非常必要的,方便對(duì)接接口的開(kāi)發(fā)人員更加清晰地知道這個(gè)接口的調(diào)用是否成功(不能僅僅簡(jiǎn)單地看返回值是否為 null 就判斷成功與否,因?yàn)橛行┙涌诘脑O(shè)計(jì)就是如此)。

使用一個(gè)狀態(tài)碼、狀態(tài)信息就能清楚地了解接口調(diào)用情況:

      
      //定義返回?cái)?shù)據(jù)結(jié)構(gòu)
public interface IResult {
    Integer getCode();
    String getMessage();
}

//常用結(jié)果的枚舉
public enum ResultEnum implements IResult {
    SUCCESS(2001"接口調(diào)用成功"),
    VALIDATE_FAILED(2002"參數(shù)校驗(yàn)失敗"),
    COMMON_FAILED(2003"接口調(diào)用失敗"),
    FORBIDDEN(2004"沒(méi)有權(quán)限訪問(wèn)資源");

    private Integer code;
    private String message;

    //省略get、set方法和構(gòu)造方法
}

//統(tǒng)一返回?cái)?shù)據(jù)結(jié)構(gòu)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T{
    private Integer code;
    private String message;
    private T data;

    public static <T> Result<T> success(T data) {
        return new Result<>(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getMessage(), data);
    }

    public static <T> Result<T> success(String message, T data) {
        return new Result<>(ResultEnum.SUCCESS.getCode(), message, data);
    }

    public static Result<?> failed() {
        return new Result<>(ResultEnum.COMMON_FAILED.getCode(), ResultEnum.COMMON_FAILED.getMessage(), null);
    }

    public static Result<?> failed(String message) {
        return new Result<>(ResultEnum.COMMON_FAILED.getCode(), message, null);
    }

    public static Result<?> failed(IResult errorResult) {
        return new Result<>(errorResult.getCode(), errorResult.getMessage(), null);
    }

    public static <T> Result<T> instance(Integer code, String message, T data) {
        Result<T> result = new Result<>();
        result.setCode(code);
        result.setMessage(message);
        result.setData(data);
        return result;
    }
}

統(tǒng)一返回結(jié)構(gòu)后,在 Controller 中就可以使用了,但是每一個(gè) Controller 都寫(xiě)這么一段最終封裝的邏輯,這些都是很重復(fù)的工作,所以還要繼續(xù)想辦法進(jìn)一步處理統(tǒng)一返回結(jié)構(gòu)。

統(tǒng)一包裝處理

Spring 中提供了一個(gè)類 ResponseBodyAdvice ,能幫助我們實(shí)現(xiàn)上述需求:

      
      public interface ResponseBodyAdvice<T{
    boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType);

    @Nullable
    beforeBodyWrite(@Nullable T body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response);
}

ResponseBodyAdvice 是對(duì) Controller 返回的內(nèi)容在 HttpMessageConverter 進(jìn)行類型轉(zhuǎn)換之前攔截,進(jìn)行相應(yīng)的處理操作后,再將結(jié)果返回給客戶端。

那這樣就可以把統(tǒng)一包裝的工作放到這個(gè)類里面:

  • supports: 判斷是否要交給 beforeBodyWrite 方法執(zhí)行,ture:需要;false:不需要
  • beforeBodyWrite: 對(duì) response 進(jìn)行具體的處理
      
      // 如果引入了swagger或knife4j的文檔生成組件,這里需要僅掃描自己項(xiàng)目的包,否則文檔無(wú)法正常生成
@RestControllerAdvice(basePackages = "com.example.demo")
public class ResponseAdvice implements ResponseBodyAdvice<Object{
    @Override
    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
        // 如果不需要進(jìn)行封裝的,可以添加一些校驗(yàn)手段,比如添加標(biāo)記排除的注解
        return true;
    }


    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        // 提供一定的靈活度,如果body已經(jīng)被包裝了,就不進(jìn)行包裝
        if (body instanceof Result) {
            return body;
        }
        return Result.success(body);
    }
}

經(jīng)過(guò)這樣改造,既能實(shí)現(xiàn)對(duì) Controller 返回的數(shù)據(jù)進(jìn)行統(tǒng)一包裝,又不需要對(duì)原有代碼進(jìn)行大量的改動(dòng)。

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

Java API 的規(guī)范 JSR303 定義了校驗(yàn)的標(biāo)準(zhǔn) validation-api ,其中一個(gè)比較出名的實(shí)現(xiàn)是 hibernate validation。

spring validation 是對(duì)其的二次封裝,常用于 SpringMVC 的參數(shù)自動(dòng)校驗(yàn),參數(shù)校驗(yàn)的代碼就不需要再與業(yè)務(wù)邏輯代碼進(jìn)行耦合了。

①@PathVariable 和 @RequestParam 參數(shù)校驗(yàn)

Get 請(qǐng)求的參數(shù)接收一般依賴這兩個(gè)注解,但是處于 url 有長(zhǎng)度限制和代碼的可維護(hù)性,超過(guò) 5 個(gè)參數(shù)盡量用實(shí)體來(lái)傳參。

對(duì) @PathVariable 和 @RequestParam 參數(shù)進(jìn)行校驗(yàn)需要在入?yún)⒙暶骷s束的注解。

如果校驗(yàn)失敗,會(huì)拋出 MethodArgumentNotValidException 異常。

      
      @RestController(value = "prettyTestController")
@RequestMapping("/pretty")
public class TestController {

    private TestService testService;

    @GetMapping("/{num}")
    public Integer detail(@PathVariable("num") @Min(1) @Max(20) Integer num) {
        return num * num;
    }

    @GetMapping("/getByEmail")
    public TestDTO getByAccount(@RequestParam @NotBlank @Email String email) {
        TestDTO testDTO = new TestDTO();
        testDTO.setEmail(email);
        return testDTO;
    }

    @Autowired
    public void setTestService(TestService prettyTestService) {
        this.testService = prettyTestService;
    }
}
校驗(yàn)原理

在 SpringMVC 中,有一個(gè)類是 RequestResponseBodyMethodProcessor,這個(gè)類有兩個(gè)作用(實(shí)際上可以從名字上得到一點(diǎn)啟發(fā))

  • 用于解析 @RequestBody 標(biāo)注的參數(shù)
  • 處理 @ResponseBody 標(biāo)注方法的返回值

解析 @RequestBoyd 標(biāo)注參數(shù)的方法是 resolveArgument。

      
      public class RequestResponseBodyMethodProcessor extends AbstractMessageConverterMethodProcessor {
      /**
     * Throws MethodArgumentNotValidException if validation fails.
     * @throws HttpMessageNotReadableException if {@link RequestBody#required()}
     * is {@code true} and there is no body content or if there is no suitable
     * converter to read the content with.
     */

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

      parameter = parameter.nestedIfOptional();
      //把請(qǐng)求數(shù)據(jù)封裝成標(biāo)注的DTO對(duì)象
      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);
          //如果校驗(yàn)不通過(guò),就拋出MethodArgumentNotValidException異常
          //如果我們不自己捕獲,那么最終會(huì)由DefaultHandlerExceptionResolver捕獲處理
          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);
    }
}

public abstract class AbstractMessageConverterMethodArgumentResolver implements HandlerMethodArgumentResolver {
  /**
    * Validate the binding target if applicable.
    * <p>The default implementation checks for {@code @javax.validation.Valid},
    * Spring's {@link org.springframework.validation.annotation.Validated},
    * and custom annotations whose name starts with "Valid".
    * @param binder the DataBinder to be used
    * @param parameter the method parameter descriptor
    * @since 4.1.5
    * @see #isBindExceptionRequired
    */

   protected void validateIfApplicable(WebDataBinder binder, MethodParameter parameter) {
    //獲取參數(shù)上的所有注解
      Annotation[] annotations = parameter.getParameterAnnotations();
      for (Annotation ann : annotations) {
      //如果注解中包含了@Valid、@Validated或者是名字以Valid開(kāi)頭的注解就進(jìn)行參數(shù)校驗(yàn)
         Object[] validationHints = ValidationAnnotationUtils.determineValidationHints(ann);
         if (validationHints != null) {
        //實(shí)際校驗(yàn)邏輯,最終會(huì)調(diào)用Hibernate Validator執(zhí)行真正的校驗(yàn)
        //所以Spring Validation是對(duì)Hibernate Validation的二次封裝
            binder.validate(validationHints);
            break;
         }
      }
   }
}
②@RequestBody 參數(shù)校驗(yàn)

Post、Put 請(qǐng)求的參數(shù)推薦使用 @RequestBody 請(qǐng)求體參數(shù)。

對(duì) @RequestBody 參數(shù)進(jìn)行校驗(yàn)需要在 DTO 對(duì)象中加入校驗(yàn)條件后,再搭配 @Validated 即可完成自動(dòng)校驗(yàn)。

如果校驗(yàn)失敗,會(huì)拋出 ConstraintViolationException 異常。

      
      //DTO
@Data
public class TestDTO {
    @NotBlank
    private String userName;

    @NotBlank
    @Length(min = 6, max = 20)
    private String password;

    @NotNull
    @Email
    private String email;
}

//Controller
@RestController(value = "prettyTestController")
@RequestMapping("/pretty")
public class TestController {

    private TestService testService;

    @PostMapping("/test-validation")
    public void testValidation(@RequestBody @Validated TestDTO testDTO) {
        this.testService.save(testDTO);
    }

    @Autowired
    public void setTestService(TestService testService) {
        this.testService = testService;
    }
}
校驗(yàn)原理

聲明約束的方式,注解加到了參數(shù)上面,可以比較容易猜測(cè)到是使用了 AOP 對(duì)方法進(jìn)行增強(qiáng)。

而實(shí)際上 Spring 也是通過(guò) MethodValidationPostProcessor 動(dòng)態(tài)注冊(cè) AOP 切面,然后使用 MethodValidationInterceptor 對(duì)切點(diǎn)方法進(jìn)行織入增強(qiáng)。

      
      public class MethodValidationPostProcessor extends AbstractBeanFactoryAwareAdvisingPostProcessor implements InitializingBean {

    //指定了創(chuàng)建切面的Bean的注解
   private Class<? extends Annotation> validatedAnnotationType = Validated.class;

    @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());
    }
}

public class MethodValidationInterceptor implements MethodInterceptor {
    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        //無(wú)需增強(qiáng)的方法,直接跳過(guò)
        if (isFactoryBeanMetadataMethod(invocation.getMethod())) {
            return invocation.proceed();
        }

        Class<?>[] groups = determineValidationGroups(invocation);
        ExecutableValidator execVal = this.validator.forExecutables();
        Method methodToValidate = invocation.getMethod();
        Set<ConstraintViolation<Object>> result;
        try {
            //方法入?yún)⑿r?yàn),最終還是委托給Hibernate Validator來(lái)校驗(yàn)
             //所以Spring Validation是對(duì)Hibernate Validation的二次封裝
            result = execVal.validateParameters(
                invocation.getThis(), methodToValidate, invocation.getArguments(), groups);
        }
        catch (IllegalArgumentException ex) {
            ...
        }
        //校驗(yàn)不通過(guò)拋出ConstraintViolationException異常
        if (!result.isEmpty()) {
            throw new ConstraintViolationException(result);
        }
        //Controller方法調(diào)用
        Object returnValue = invocation.proceed();
        //下面是對(duì)返回值做校驗(yàn),流程和上面大概一樣
        result = execVal.validateReturnValue(invocation.getThis(), methodToValidate, returnValue, groups);
        if (!result.isEmpty()) {
            throw new ConstraintViolationException(result);
        }
        return returnValue;
    }
}
③自定義校驗(yàn)規(guī)則

有些時(shí)候 JSR303 標(biāo)準(zhǔn)中提供的校驗(yàn)規(guī)則不滿足復(fù)雜的業(yè)務(wù)需求,也可以自定義校驗(yàn)規(guī)則。

自定義校驗(yàn)規(guī)則需要做兩件事情:

  • 自定義注解類,定義錯(cuò)誤信息和一些其他需要的內(nèi)容
  • 注解校驗(yàn)器,定義判定規(guī)則
      
      //自定義注解類
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = MobileValidator.class)
public @interface Mobile 
{
    /**
     * 是否允許為空
     */

    boolean required() default true;

    /**
     * 校驗(yàn)不通過(guò)返回的提示信息
     */

    String message() default "不是一個(gè)手機(jī)號(hào)碼格式";

    /**
     * Constraint要求的屬性,用于分組校驗(yàn)和擴(kuò)展,留空就好
     */

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

//注解校驗(yàn)器
public class MobileValidator implements ConstraintValidator<MobileCharSequence{

    private boolean required = false;

    private final Pattern pattern = Pattern.compile("^1[34578][0-9]{9}$"); // 驗(yàn)證手機(jī)號(hào)

    /**
     * 在驗(yàn)證開(kāi)始前調(diào)用注解里的方法,從而獲取到一些注解里的參數(shù)
     *
     * @param constraintAnnotation annotation instance for a given constraint declaration
     */

    @Override
    public void initialize(Mobile constraintAnnotation) {
        this.required = constraintAnnotation.required();
    }

    /**
     * 判斷參數(shù)是否合法
     *
     * @param value   object to validate
     * @param context context in which the constraint is evaluated
     */

    @Override
    public boolean isValid(CharSequence value, ConstraintValidatorContext context) {
        if (this.required) {
            // 驗(yàn)證
            return isMobile(value);
        }
        if (StringUtils.hasText(value)) {
            // 驗(yàn)證
            return isMobile(value);
        }
        return true;
    }

    private boolean isMobile(final CharSequence str) {
        Matcher m = pattern.matcher(str);
        return m.matches();
    }
}

自動(dòng)校驗(yàn)參數(shù)真的是一項(xiàng)非常必要、非常有意義的工作。JSR303 提供了豐富的參數(shù)校驗(yàn)規(guī)則,再加上復(fù)雜業(yè)務(wù)的自定義校驗(yàn)規(guī)則,完全把參數(shù)校驗(yàn)和業(yè)務(wù)邏輯解耦開(kāi),代碼更加簡(jiǎn)潔,符合單一職責(zé)原則。

自定義異常與統(tǒng)一攔截異常

原來(lái)的代碼中可以看到有幾個(gè)問(wèn)題:

  • 拋出的異常不夠具體,只是簡(jiǎn)單地把錯(cuò)誤信息放到了 Exception 中
  • 拋出異常后,Controller 不能具體地根據(jù)異常做出反饋
  • 雖然做了參數(shù)自動(dòng)校驗(yàn),但是異常返回結(jié)構(gòu)和正常返回結(jié)構(gòu)不一致

自定義異常是為了后面統(tǒng)一攔截異常時(shí),對(duì)業(yè)務(wù)中的異常有更加細(xì)顆粒度的區(qū)分,攔截時(shí)針對(duì)不同的異常作出不同的響應(yīng)。

而統(tǒng)一攔截異常的目的一個(gè)是為了可以與前面定義下來(lái)的統(tǒng)一包裝返回結(jié)構(gòu)能對(duì)應(yīng)上,另一個(gè)是我們希望無(wú)論系統(tǒng)發(fā)生什么異常,Http 的狀態(tài)碼都要是 200 ,盡可能由業(yè)務(wù)來(lái)區(qū)分系統(tǒng)的異常。

      
      //自定義異常
public class ForbiddenException extends RuntimeException {
    public ForbiddenException(String message) {
        super(message);
    }
}

//自定義異常
public class BusinessException extends RuntimeException {
    public BusinessException(String message) {
        super(message);
    }
}

//統(tǒng)一攔截異常
@RestControllerAdvice(basePackages = "com.example.demo")
public class ExceptionAdvice {

    /**
     * 捕獲 {@code BusinessException} 異常
     */

    @ExceptionHandler({BusinessException.class})
    public Result<?> handleBusinessException(BusinessException ex
{
        return Result.failed(ex.getMessage());
    }

    /**
     * 捕獲 {@code ForbiddenException} 異常
     */

    @ExceptionHandler({ForbiddenException.class})
    public Result<?> handleForbiddenException(ForbiddenException ex
{
        return Result.failed(ResultEnum.FORBIDDEN);
    }

    /**
     * {@code @RequestBody} 參數(shù)校驗(yàn)不通過(guò)時(shí)拋出的異常處理
     */

    @ExceptionHandler({MethodArgumentNotValidException.class})
    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();
        if (StringUtils.hasText(msg)) {
            return Result.failed(ResultEnum.VALIDATE_FAILED.getCode(), msg);
        }
        return Result.failed(ResultEnum.VALIDATE_FAILED);
    }

    /**
     * {@code @PathVariable} 和 {@code @RequestParam} 參數(shù)校驗(yàn)不通過(guò)時(shí)拋出的異常處理
     */

    @ExceptionHandler({ConstraintViolationException.class})
    public Result<?> handleConstraintViolationException(ConstraintViolationException ex
{
        if (StringUtils.hasText(ex.getMessage())) {
            return Result.failed(ResultEnum.VALIDATE_FAILED.getCode(), ex.getMessage());
        }
        return Result.failed(ResultEnum.VALIDATE_FAILED);
    }

    /**
     * 頂級(jí)異常捕獲并統(tǒng)一處理,當(dāng)其他異常無(wú)法處理時(shí)候選擇使用
     */

    @ExceptionHandler({Exception.class})
    public Result<?> handle(Exception ex
{
        return Result.failed(ex.getMessage());
    }

}

總結(jié)

做好了這一切改動(dòng)后,可以發(fā)現(xiàn) Controller 的代碼變得非常簡(jiǎn)潔,可以很清楚地知道每一個(gè)參數(shù)、每一個(gè) DTO 的校驗(yàn)規(guī)則,可以很明確地看到每一個(gè) Controller 方法返回的是什么數(shù)據(jù),也可以方便每一個(gè)異常應(yīng)該如何進(jìn)行反饋。

這一套操作下來(lái)后,我們能更加專注于業(yè)務(wù)邏輯的開(kāi)發(fā),代碼簡(jiǎn)介、功能完善,何樂(lè)而不為呢?

      
        
              
                  ↓ 點(diǎn)擊閱讀原文,直達(dá)個(gè)人博客
                
              

你在看嗎

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

手機(jī)掃一掃分享

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

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 无码人妻一区二区三区免费n狂飙| 免费毛片视频| 成人三级视频在线观看| 日本成人网址| 爆操欧美| 国产三级图片| 人人人妻人人人操| 91无码一区二区三区在线| 91传媒在线观看| 人人摸人人操人人| 亚洲欧美成人在线视频| 亚洲码成人| 欧美一道本在线| 久久久91人妻无码精品蜜桃ID | 一区免费在线观看| 蝌蚪九色啦403| 日韩免费在线| 国产综合激情| 一级a片在线观看| 夜夜夜影院| 人人草大香蕉| 国产手机精品视频| 国产激情在线观看视频| 中文字幕无码A片| 91国产免费视频| 亚洲第一色在线| 亚洲中文字幕在线观看| 国产特級黃色大片| 黄片高清无码在线观看| 婚闹不堪入目A片| 国内成人精品网站| 久操综合| 亚洲专区视频| 免费内射视频| 在线无码中文| 91丨九色丨蝌蚪丨丝袜| 无码蜜桃吴梦梦| 色婷婷欧美| 佐山爱人妻无码蜜桃| 日韩三级电影| 高清无码在线看| 午夜无码人妻AV| 日本五十路熟女视频| 久久婷婷五月综合伊人| 人人看人人艹| 欧美一级生活片| 中文字幕日韩欧美在线| 婷婷色色五月天图片| 亚洲V| 中文字幕中文字幕| 97精品综合久久| 豆花视频logo| sm在线| 国产裸体网站| 中文一线二线视频| 欧美v亚洲| 我要看黄色一级片| 高清无码一区二区在线| 天天干天天日蜜臀色欲av| 老师机性爱视频在线播放| 人人色人人摸| 欧美性网| 在线a视频| 四川少扫搡BBBBB搡B| wwwAV| 日本v片| 围内精品久久久久久久久白丝制服| 91视频网站在线| 高清无码视频网站| 超碰97人人爱| 亚洲无码中文字幕在线播放| 亚洲精品国产精品乱码不卡√香蕉| 免费在线观看无码视频| 秋霞午夜成人无码精品| 日韩三级片在线播放| 伊人激情五月天| 国产精品视频你懂的| 国产永久精品| 青青在线视频| 亚洲无码中文视频| 99热在线看| 操欧美女人| 琪琪av| 日本无码一区二区三三| 翔田千里一区二区三区精品播放| 日韩黄色小视频| 99亚洲无码| 欧美午夜成人一区二区三区 | 在线免费观看av网站| 日韩在线视频免费| 激情五月天小说网| 中文在线字幕免费观看| www.中文字幕| 豆花视频久久| 日本黄色A片| 综合伊人大香蕉| 亚洲中文字幕码mv| 干欧美女人| 亚洲美女免费视频| 国产在线在线| 99er在线视频| 免费中文字幕| 成人网站高清无码| 天天躁狠狠躁夜躁2024| 亚洲高清成人| 国产激倩都市一区二区三区欧美| 欧美日韩不卡视频| 亲子乱婬一级A片| 国产精品丝袜| 高清无码在线免费观看| 在线免费观看a| 欧美操B视频| 亚洲精品乱码久久久久久久| 国产无遮挡又黄又爽又色学生软件| 国产成人秘在线观看免费网站| 日皮视频免费| 走光无码一区二区三区| 国产精品永久免费| 亚洲AV无码成人H动漫| 亚洲中文无码字幕| 精品91在线视频| 成人一级A片| 91性爱视频在线观看| 免费看无码网站成人A片| 91亚洲精品国偷拍自产在线观看 | 久久天堂AV综合合色蜜桃网| 青娱乐精品| 少妇高潮喷水| 五月婷婷色欲| 亚洲高清无码在线播放| 国产伦精品一区二区三区妓女下载 | 少妇高潮喷水| 无码人妻丰满熟妇啪啪| 欧美视频免费在线观看| 国产又爽又黄网站免费观看| 九九热只有精品| 中文字幕第11页| 佳佳女王footjob超级爽| 欧美精品日韩| 先锋久久资源| 久久AV片| 少妇精品久久久久久久久久| 九七影院第二页| 亚洲成人影音| 444444在线观看免费高清电视剧木瓜一 | 一区二区三区四区免费观看| 成人在线无码视频| 欧美三级长视频| 丝袜一区| 日本黄A三级三级三级| 亚洲激情视频| 丰满老妇高潮一级A片| 在线免费观看成人视频| 亚洲中文字幕在线观看| 国产激情福利| 一区二区无码av| 午夜成人福利在线观看| 超碰操逼| 国产小电影在线观看| 2025av中文字幕| 午夜成人小电影| 一区二区无码av| 两根茎一起进去好爽A片在线观看| 日本不卡中文字幕| 久久久五月| 99热在线观看精品| 亚洲精品久久久久久| 亚洲成色A片77777在线小说| 天天久久毛片| 亚洲男人综合| 久久无码一区二区三区| 高清无码第一页| 成人无码99| 婷婷五月综合久久中文字幕| 久草香蕉视频| 婷婷五月天性爱| 日本少妇激情视频| 天天干天天做| 再深点灬好爽灬轻点久久国产| 大地中文资源5页的更新内容| av玖玖| 亚洲AV成人片无码网站网蜜柚| 99性爱| 一区二区三区Av| 国产日本在线视频| 中文字幕在线观看视频www| 无码av一区| 欧美国产第一页| 狠操网| 东京热免费视频| 欧美成人在线网站| jzzijzzij亚洲成熟少妇在线播放| 国产白嫩精品久久久久久| 久久久3| 国产午夜无码福利视频| 欧美毛片在线观看| 国产无码影视| 成人亚洲精品一区二区三区| 色tv在线| 搡BBBB搡BBB搡五十| 2018天天日天天操| 蜜桃成人AV| 亚洲天堂在线免费观看| 午夜理论片| 国产高清视频在线播放| 亚洲三级av| 丁香视频在线观看| 日韩视频一二三| 91无码精品一区二区| 一二区视频| 一本色道久久综合无码人妻软件| 中文字幕乱码中文乱码91| 欧美在线观看一区二区| 张柏芝BBw搡BBBB槡BBBBHDfree | 亚洲色五月天| 国产一级乱伦| 中文字幕中文字幕一区| 亚洲少妇视频| 97一区二区三区| 国产色情视频在线观看| аⅴ资源新版在线天堂| 丝瓜污视频| 日本久久婷婷| 亚洲色播放| 综合网久久| 七十路の高齡熟妇无码| 日韩免费观看视频| 强开小嫩苞一区二区电影| 日韩精品小电影| 波多野结衣无码网站| 五月天综合视频| 一本到在线观看午夜剧场| 3D动漫精品啪啪一区二区下载| 国产无码操逼| 69成人天堂无码免费| 九色91PORNY国产| 黄色草莓视频| 成人无码日本动漫电影| 国产AV大香蕉| 亚洲AV无码日韩AV无码导航| 天堂成人在线视频| 丰臀肥逼高清视频电影播放| 色视频在线观看| 欧美中文字幕在线观看| 亚洲AV无码成人精品| 天天日天天搞| 久久伊人综合| 激情另类视频| 中文字幕日本| 免费视频爱爱| 欧美成人免费观看| 一级内射片在线网站观看| www.大香蕉伊人| 亚洲视频精选| 欧一美一婬一伦一区二区三区自慰国| 中字幕视频在线永久在线观看免费 | 亚洲日韩一区| 在线观看高清无码| 中文字幕第一页在线| 久久天天| H片在线观看| 免费AV网站| 亚洲激情视频| 91大长腿美女花外围在线观看| 东方美美高清无码一区| 北条麻妃电影九九九| 久久人妻无码中文字幕系列| 久久久久国产一区二区三区四区| 国产操穴视频| 干日本少妇| 猫咪亚洲AV成人无码电影| 亚洲国产av一区| 西西444WWW无码视频软件| 国产亚洲综合无码| 欧美色图视频在线观看| 永久中文字幕| 人妻黑人一区二区三区| 可以免费看av的网站| 青青草成人在线观看| 国产com| 激情免费视频| 无码成人午夜在线影院| 蜜臀精品| 亚洲一区中文字幕| 国产精品秘久久久久久久久| 91一区| 中文字幕午夜福利| 91av电影网| 丁香五月伊人| 99热精品免费观看| 久操视频免费看| 青青操久久| 亚洲AV无码成人精品区大猫| JiZZjiZZ亚洲成熟熟妇| 91三级| 天天干天天干天天| 国产最新在线| 日本免费高清视频在线观看一区 | 91美女在线观看| 香蕉成人网站在线观看| 久久久久成人视频| 国产视频123区| 日韩一区二区三区免费视频| 久久国产亚洲| 国产做爱| 色欲亚洲| 欧美成人精品一区二区三区 | 夜夜夜影院| 国产精品无码AV| 日韩精品成人电影| 五月天激情婷婷| 日本在线| 日韩免费在线观看一区入口| 日本天堂网站| 日韩熟妇无码| 亚洲区成人777777精品| 中文字幕第98页| 欧美,日韩,日| 欧美三级不卡| 亚洲一区翔田千里无码| 日日夜夜拍| 久草小视频| 婷婷开心色四房播播在线| 国产婷婷五月| 高潮喷水视频| 狠狠干2021| 黄色A片视频| 天天综合字幕一区二区| 在线免费中文字幕| 欧美性夜黄A片爽爽免费视频| 日日夜夜拍| 东京热精品| 操美女嫩逼| 欧美激情精品| 人妻斩り43歳| 激情六月| 亚洲综合在线视频| 国产3p露脸普通话对白| 乱子伦国产精品视频一级毛 | 色天堂在线观看视频| 亚洲综合视频在线| 丁香五月av| 亚洲中文字幕人妻。| 国产天堂在线观看| 操逼啦| 大香蕉人妻| 久久九九视频| 中文字幕亚洲无码视频| 国产视频99| 大鸡吧成人视频| 日本中文字幕网| 三级片在线网站| 日韩一级视频| 一级a一级a免费观看免免黄‘/| 成人伊人综合| 大香蕉75| 国产精品午夜在线| 四川婬妇BBw搡BBBB搡| 精品熟女| 亚洲中文字幕在线无码| 一级片在线视频| 天天干夜夜操| 国产成人精品免高潮在线观看 | 日韩精品无码AV| 日韩精品成人无码免费| 火淫玖玖免费精品| 无码av免费| 青草91| 99国产精品| 国产中文字幕在线免费观看| 精品成人无码| 激情内射| 一区二区三区四区| 京东一热本色道久久爱| 天天日天天舔| 无码999| 日本一本在线| 亚洲无码在线播放| 中文无码网站| 国产精品高潮无套内谢| 九九热精品在线| 无码一级A片| 日本高清视频免费观看| AV天堂亚洲| 日韩高清久久| 日韩无码操逼| 另类罕见稀奇videos| 亚洲AV在线看| 亚洲第一视频在线观看| 中文字幕av在线观看| 免费看黄色的网站| 国产剧情91| 无码高清在线观看| 男女av网站| 精品无码一区二区三| 天天草天天爽| 中文在线观看视频| 日本一区二区精品| AV东方在线| 久久久中文| 翔田千里無碼破解| 天天操嫩逼无套视频| 欧美高潮视频| 九九热精品| 成人电影综合网| 91在线亚洲| 欧美日韩中文字幕视频| 91av电影| 伊人逼逼| 中文字幕一区二区三区四区五区| 国产亚洲精品久久久久久桃色| 成人网站免费在线| 免费人成视频在线播放| 猫咪成人网站| 日本一级黄| 国产精品秘久久久久久久久| 国产成人精品一区二区三区视频 | 亚洲天堂在线观看免费| 日本无码视频在线观看毒| 国产真实露脸乱子伦对白高清视频 | 国产精品在线观看视频| 先锋影音资源站av每日资源在线 | 日韩AV无码一区二区| 91精品一区| www久久99| 成人国产精品秘在线看| 中文字幕在线电影| 日韩肏屄视频在线观看| 日韩一区二区在线视频| 操逼操逼操| 亚洲操逼片| 三级视频国产| www.亚洲天堂| 无码草逼| 人人人操人人| 中文字幕亚洲区| 动漫人物插画动漫人物的视频软件 | 成人黄A片免费| 欧美激情视频一区二区三区不卡 | 一本久道视频一本久道| 无码av网站| 国产videos| 欧美精品成人免费片| 亚洲无码高清一区| 老鸭窝久久久| 欧美不卡在线| aaa成人| 天堂麻豆天美| 999免费视频| 91久久人澡人妻人人澡人人爽 | 久久黄色大片| 色淫视频| 欧美一级婬片AAAA毛片| 成人免费一级视频| 婷婷五月天av| 婷婷五月中文| 特级毛片在线观看| 啊啊啊啊啊网站| 免费无码一区二区三区四区五区| 黄片在线免费观看视频| 97亚洲国产| 亚洲无码一| 久久久久久伊人| 国产婷婷久久Av免费高清| 亚洲视频一区二区三区四区娇小视频在线观看视频 | 国产激情在线| 国产色色色色| 中韩日美免费看的电影| 国产96在线亚洲| 亚洲欧美精品在线| 亚洲AV人人夜夜澡人人| xxx国产精品| 一级色情片| 亚洲人妻有码| 麻豆黄片| 国产黄色网| 国产丝袜无码| 欧美精品黄| 欧美日韩午夜福利视频| 中文字幕AV无码| 黄色午夜| 久久视频网站| 神马午夜福利| 在线观看无码高清| 一本无码高清| av天堂电影网| 精品一二三区| 亚洲色一区二区| 高清无码在线免费观看视频| 91精品国际| 久热中文| 国产婷婷色一区二区在线观看| 无码色| 久久久久久久久成人| 亚洲一级二级| 狠狠干影院| 中国老女人性爱视频| 久久久久一区二区三区| 91大神免费在线观看| 久久精品成人电影| 国产迷奸视频| 国产精品久久久久久无人区| 5252a我爱haose01我愿| 一级AA片| 日韩高清一区二区| 91探花秘在线播放偷拍| 黑人亚洲娇小videos∞| 国产一毛a一毛a在线观看| 日韩无码人妻| 亚州激情| 操逼网国产| 日韩性生活网| 国产亚洲精品久久久波多野结衣| 91狠狠爱| 国产精品久久久久久久久免费无码| 欧美日韩在线免费| 免费人成网站| av在线一区二区三区| 尹人大香蕉网| 亚洲三级网站在线观看| 97精品| 午夜精品18视频国产17c| 日本国产在线观看| 91蜜桃传媒在线观看| 先锋影音资源一区| 夜夜网站| 欧美日韩视频一区二区三区| 日韩av免费| 尻屄网| 麻豆高清无码| www.插插| 草逼视频网站| 91精品人妻一区二区三区四区 | 粉嫩99精品99久久久久| 欧美AAA大片| 婷婷丁香五月在线| 密臀福利导航| 精品久久视频| 亚洲激情av| 家庭乱伦av| 无码成人在线| 91久久人澡人妻人人澡人人爽| 免费a片观看| 日本东京热视频| 色综合色| 久久波多野结衣| 国产一区二区成人久久919色| 看肏屄视频| 无码电影免费观看| 97午夜福利视频| 无遮挡动态图| 天天撸免费视频| 底流量AV电影在线| 日韩一区二区三区四区| 久久美女视频| 亚洲第一免费视频| 簧片在线免费观看| 9l视频自拍蝌蚪9l成人| 怡春院院成人免费视频| 精品欧美成人片在线| 国语精品自拍| 天天夜夜久久| 亚洲黄色在线播放| 无码三级午夜久久人妻| 日本视频在线免费| 日日夜夜超碰| 黄色香蕉网站| 91久久精品一区二区三区| 青草成人在线| 黄色视频免费在线看| 大香蕉伊人免费| 精品国产AV鲁一鲁一区| 日韩av电影免费在线观看| 久色婷婷在线| 好爽~要尿了~要喷了~同桌| 国产精品色呦呦| 青草在线视频| 黄色片网站视频| 色婷婷狠狠操| 国产一区二区三区四区在线观看| 日本免费版网站nba| 成人在线第一页| 另类老妇奶性BBWBBwBBw| 午夜视频免费| 日本免费在线视频| 国产精品成人无码专区| 99久久婷婷国产精品2020| 日韩一区二区在线视频| 婷婷五月天成人电影| 北条麻妃无码视频在线观看| 日韩无码性爱| www.av在线| 三级网站在线| 吴梦梦md0069| 天天爽天天爽夜夜爽| 国产在线观看一区| 日韩欧美性爱视频| 嫩BBB槡BBBB槡BBBB百度| 性爱AV天堂| 久久综合五月天| 免费乱伦视频| 色综合久久88色综合天天| 国产视频久久久| 天堂无码| 波多野结衣高清av久久直播免 | 精品一区二区三区四区五区六区| 成人无码免费一区二区中文| 亚洲无码视频一区二区| 激情开心五月天| 一起操在线观看| 成人高清无码| 日本欧洲三级| 欧一美一婬一伦一区?| 五月乱伦| 国内精品久久久久久久| 中文字幕精品亚洲熟女| 免费在线观看黄色| 亚洲天堂无码a| 国产理论视频在线观看| 亚洲人人18XXX—20HD| 97人妻人人澡人人爽人人| 中日韩在线| 色色9999| 甘肃WBBBB搡wBBBB| TokyoKot大交乱无码| 三级片AV在线| 成人免费黄色视频| www.91国产| 蜜桃视频网站| 99re6热在线精品视频功能| 嗯啊在线视频| 日韩欧美一级二级| 西西人体444rt高清大胆模特| 日逼大片| 午夜艹| 日日操天天操| 国产肏屄| 国产欧美综合一区二区三区| 欧美激情一区| 91夜夜夜| 成人福利电影| 97久久人人| 国产免费久久| 成人免费毛片果冻日本| 国产精品一区二区在线播放| 国产一区二区三区四区五区在线| 日韩在线精品| 五月丁香在线视频| 日韩高清一级免费| 日韩无码高清免费| 成年人黄色视频在线观看| 亚洲人妻电影| 大香蕉久久| 国产成人三级在线播放| 欧美日韩国产性爱| A级片在线观看| 国产福利视频| AV中文无码| 婷婷九月| 人人爽人人操| 国产亚洲欧美日韩高清| 精品人妻无码一区二区三区四川人| 亚洲无码精品在线| 激情内射| 成人免费A片在线观看直播96| 蜜桃视频网站18| 加勒比DVD手机在线播放观看视频| 亚洲精品白浆高清久久久久久| 久久久久精| 亚洲AV秘无码一区浜崎りお| 久福利| 国产精品a久久久久| 欧美色五月| 中文无码AV在线| www.一区| 无码人妻日韩精品一区二区三 | 欧美又粗又大AAA片| 丰满人妻一区二区三区四区53| 亚州激情| 大香蕉在线视频75| 男人天堂久久| 大香蕉亚洲| 337p粉嫩噜噜噜| 欧美日韩国内| 成人视频免费在线观看| 人人操人人爱人人摸| 99无码人妻| 香蕉成人网| 亚洲三级视频在线播出| 天堂а√在线中文在线新版| 五月天黄色电影| 国产精品国产三级国产AⅤ| 欧美午夜精品成人片在线播放 | 亚洲AV无码乱码国产精品黑人| 欧美一区二区在线视频| 免费无码视频| 免费成人在线看片黄| 国产一级特黄A片| 另类综合激情| 欧美一级aaa| 特级丰满少妇免费观看| 免费版成人久久幺| 色九九九| 无码高清视频在线观看| 国产一区二区成人久久919色 | AV天堂亚洲| XX熟女HD| 91精品免费视频| 性爱午夜视频| 粉嫩护士小泬18p| 99精品在线观看| 激情操逼视频| 亚洲日韩中文字幕在线观看| 激情无码在线观看| 最新国产av| 亚洲成av| 国产精品美女毛片真酒店| 国产一级乱伦| 国产成人午夜福利在线| 色吊妞| 亚洲加勒比在线| 久久久久久黄| 日韩肏逼| 三级操逼| 怡红院男人天堂| 国产欧美日韩一区| 亚洲黄色免费网站| 在线观看欧美黄片| 午夜国产在线观看| 成人无码网站在线观看| 青青草在线视频免费观看| 国产精品成| 日韩在线毛片| 仓井空一区二区三区| 成人免费毛片AAAAAA片| 中文字幕第一页av| 成人777| 成人无码观看| 国产三四区久久| 一道本无码在线视频| 国产十欧洲十美国+亚洲一二三区在线午夜 | 黑人操逼| 大香蕉三级| 91在线91| 中文字幕av久久爽Av| 欧美性一区| 午夜福利亚洲| 国产成人自拍网| 天天干天天操天天射| 青草一区| 38D蜜桃臀| 无码人妻精品一区二区三区蜜桃91| 亚洲成人在线视频观看| 草莓视频在线播放| 免费观看黄片网站| 九九九色| 69成人天堂无码免费| 成人肏逼视频在线| 久肏| 337p粉嫩噜噜噜| 小骚逼操死你| 日韩av高清| 丁香五月天婷婷久久| 欧美成人版| 操极品少妇逼| 无码激情| 97在线视频免费观看| 影音先锋男人| 在线视频你懂得| 综合激情AV| 人人操人人操人人操人人操人人操 | 黄色小网站在线观看| 九九内射| 日韩操逼| 国产又大又粗| 亚洲成人大片| 国产色五月视频| 国产综合久久久7777777| 日韩熟妇人妻中文字幕| 黄色A级片| 粉嫩小泬BBBB免费看-百度| 无码男女| 日本a在线| 亚洲三级黄色视频| 走光无码一区二区三区| av在线天堂| 亚洲va欧洲va国产va不卡| 无码av网| 亚洲无码不卡| 青青草原视频在线| 久久久无码精品亚洲日韩男男| 一道本一区二区| 亚洲第一成人久久网站| AV你懂得| 青青草原在线| 亚洲午夜无码久久久| 国产黄色在线观看| 91精品国产偷窥一区二区| 黄色成人在线观看视频| 国内综合久久| 国产毛片视频| 无码视频韩国| 日韩无码AV中文字幕| 中文字幕首页| 最新一区二区三区| 乱伦综合网| 亚洲熟妇AV日韩熟妇在线| 精品國產一區二區三區久久蜜月| 上床网站| 欧美内射网站| 日韩AV自拍| www.久久网| 精品国产91乱码一区二区三区| 在线看91| 操BBB操BBB| 3D动漫精品啪啪一区二区| 东京热免费视频| 热久久精品| 国产麻豆一区二区三区| 亚洲aaa在线| 久久免费黄色视频| 亚洲成人精品视频| 久久午夜无码鲁丝| 91国视频| 亚洲欧洲久久电影| 伊人导航| 欧美丰满美乳XXⅩ高潮www | 天天看A片| 在线国产激情视频| 亚洲av性爱| 国产18| 午夜av在线观看| 蜜桃传媒av| 99热精品免费| 免费观看高清无码视频| 伊人午夜| 国产久久久久久久| 天天日夜夜草| 国产一区一区| 91福利院| 午夜老司机福利| 免费黄色成人网站| 成人欧美大片黄18| 翔田千里無碼破解| 91精品婷婷国产综合久久蝌蚪| 夜夜夜操操操| 韩国日本美国免费毛片| 国产强伦轩免费视频在线| 午夜高清| 久久久黄色视频| 日韩美女免费视频| 撸一撸免费视频| 国产性受XXXXXYX性爽| 免费人成年激情视频在线观看| 中文字幕AV在线播放| 99视频热| 91麻豆精品91久久久ios版| 久久精品黄色| 操屄在线观看| 夜夜精品视频| 日韩精品无码av| 国产性交网站| 久久久成人网| 亚洲vs无码秘蜜桃少妇| 中文字幕-区二区三区四区视频中国| 午夜乱论| 天堂一区在线观看| www.日逼| 国产三级性爱视频| av天天操| 日本久久不卡| 日韩日日日| 国产中文字幕在线免费观看| 中文av网站| 国外亚洲成AV人片在线观看| 欧美三级在线| 日韩国产在线| 91精品国产麻豆国产自产在线 | 91亚洲国产AⅤ精品一区二区| 超碰免费91| www.操| 波多野结衣在线观看一区二区 | 色婷婷日韩精品一区二区三区| 懂色av懂色av粉嫩av无码| 一级日逼视频| 日韩操片| 国产老骚逼| 天天舔天天干| 久久人人操人人| 亚洲熟女一区二区| 99在线精品观看| 日韩精品极品视频在线观看免费| 天天操人人射| 福利视频在线| 久久久123| 高清无码一级片| 免费无码婬片aaaa| 亚洲天堂在线视频播放| 18成人网站在线观看| 国产乱╳╳AⅤ毛片|