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

Springboot3新特性異常信息ProblemDetail詳解

開發(fā) 前端
要為Spring WebFlux異常和任何ErrorResponseException啟用RFC 7807響應(yīng),需要擴展 ResponseEntityExceptionHandler,并在Spring配置中把它聲明為@ControllerAdvice。處理程序有一個@ExceptionHandler方法,可以處理所有ErrorResponse異常,其中包括所有內(nèi)置的web異常。您可以添加更多的異常

環(huán)境:Springboot3.0.5

概述

RFC 7807定義了為HTTP響應(yīng)中錯誤的可讀詳細(xì)信息,以避免需要為HTTP API定義新的錯誤響應(yīng)格式。HTTP [RFC7230]狀態(tài)碼有時不足以傳達(dá)關(guān)于錯誤的足夠信息。

RFC 7807 定義了簡單的JSON[RFC7159]和XML[W3C.REC-XML-20081126]文檔格式以滿足此目的。它們被設(shè)計為可由HTTP API重用,HTTP API可以識別特定于其需求的不同“問題類型”。

因此,API客戶端既可以知道高級錯誤類(使用狀態(tài)碼),也可以知道問題的細(xì)粒度細(xì)節(jié)。

例如,考慮一個響應(yīng),該響應(yīng)表明客戶的賬戶沒有足夠的權(quán)限。403禁止?fàn)顟B(tài)代碼可能被認(rèn)為是最適合使用的,因為它將向HTTP通用軟件(如客戶端庫、緩存和代理)通知響應(yīng)的一般語義。然而,這并沒有為API客戶端提供足夠的信息,說明為什么禁止請求、適用的帳戶余額或如何糾正問題。如果這些細(xì)節(jié)以可讀的格式包含在響應(yīng)體中,則客戶端可以適當(dāng)?shù)靥幚硭?;例如觸發(fā)將更多的信用轉(zhuǎn)移到賬戶中。

RFC 7807規(guī)范通過使用URI[RFC3986]識別特定類型的問題(例如,“信用不足”)來實現(xiàn)這一點;HTTP API可以通過指定受其控制的新URI或重用現(xiàn)有URI來實現(xiàn)這一點。

此外,Problem Detail信息可以包含其他信息,例如標(biāo)識問題具體發(fā)生的URI(有效地為“Joe上周四沒有足夠的信用”這一概念提供了標(biāo)識符),這對于支持或取證目的可能很有用。

Problem Detail的數(shù)據(jù)模型是一個JSON[RFC7159]對象;當(dāng)格式化為JSON文檔時,它使用“application/problem+json”媒體類型。

請注意,Problem Detail 不是在HTTP中傳達(dá)問題細(xì)節(jié)的唯一方式;例如,如果響應(yīng)仍然是資源的表示,那么通常最好以該應(yīng)用程序的格式來描述相關(guān)細(xì)節(jié)。同樣,在許多情況下,有一個適當(dāng)?shù)腍TTP狀態(tài)代碼,不需要傳遞額外的細(xì)節(jié)。

Problem Detail消息格式

Problem Detail的規(guī)范模型是JSON對象。當(dāng)序列化為JSON文檔時,該格式用“application/problem+json”媒體類型標(biāo)識。

例如,一個帶有JSONProblem Detail的HTTP響應(yīng):

HTTP/1.1 403 Forbidden
Content-Type: application/problem+json
Content-Language: en
{
    "type": "https://pack.com/probs/out-of-credit",
    "title": "你沒有足夠的信用。",
    "detail": "你現(xiàn)在的余額是30,但是要花50。",
    "instance": "/account/12345/msgs/abc",
    "balance": 30,
    "accounts": ["/account/12345", "/account/67890"]
}

這里,結(jié)余不足問題(由其類型URI標(biāo)識)

  • type:標(biāo)識問題類型的URI引用
  • title:中指明了403的原因
  • instance:給出了具體問題發(fā)生的參考
  • detail:中給出了發(fā)生的具體細(xì)節(jié),并添加了兩個擴展
  • balance:表示帳戶的余額
  • accounts:提供了可以充值帳戶的鏈接

傳遞問題特定擴展的能力允許傳遞多個問題。例如:

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
Content-Language: en
 {
   "type": "https://example.net/validation-error",
   "title": "Your request parameters didn't validate.",
   "invalid-params": [ {
      "name": "age",
      "reason": "must be a positive integer"
    },
    {
      "name": "color",
      "reason": "must be 'green', 'red' or 'blue'"
    }
  ]
}

Spring支持

從Spring6.x開始支持Problem Detail。

REST服務(wù)的一個常見需求是在錯誤響應(yīng)的主體中包含詳細(xì)信息。Spring框架支持“Problem Details for HTTP APIs”規(guī)范,即RFC 7807。

以下是此支持的主要抽象:

  • ProblemDetail — ?RFC 7807問題細(xì)節(jié)的表示;一個簡單的容器,用于規(guī)范中定義的標(biāo)準(zhǔn)字段和非標(biāo)準(zhǔn)字段。
  • ErrorResponse — 以RFC 7807的格式暴露HTTP錯誤響應(yīng)細(xì)節(jié),包括HTTP狀態(tài)、響應(yīng)頭和響應(yīng)體;這允許異常封裝并暴露它們?nèi)绾斡成涞紿TTP響應(yīng)的細(xì)節(jié)。所有Spring MVC異常都實現(xiàn)了這一點。
  • ErrorResponseException?—?基本的ErrorResponse實現(xiàn),其他人可以作為一個方便的基類使用。
  • ResponseEntityExceptionHandler?—?@ControllerAdvice的方便基類,它處理所有Spring MVC異常,以及任何ErrorResponseException,并渲染一個帶有主體的錯誤響應(yīng)。

Spring中要使用ProblemDetail首先需要通過如下配置開啟:

spring:
  mvc:
    problemdetails:
      enabled: true

我們可以在任何使用@ExceptionHandler或任何@RequestMapping方法返回ProblemDetailErrorResponse以呈現(xiàn)RFC 7807響應(yīng)。處理方式如下:

  • ProblemDetail的status屬性決定了HTTP的狀態(tài)。
  • 如果還沒有設(shè)置,則從當(dāng)前URL路徑設(shè)置ProblemDetail的實例屬性。
  • 對于內(nèi)容協(xié)商,Jackson HttpMessageConverter在渲染ProblemDetail時更喜歡“application/problem+json”而不是“application/json”,如果沒有找到兼容的媒體類型,也會使用它。

要為Spring WebFlux異常和任何ErrorResponseException啟用RFC 7807響應(yīng),需要擴展 ResponseEntityExceptionHandler,并在Spring配置中把它聲明為@ControllerAdvice。處理程序有一個@ExceptionHandler方法,可以處理所有ErrorResponse異常,其中包括所有內(nèi)置的web異常。您可以添加更多的異常處理方法,并使用protected方法將任何異常映射到ProblemDetail。

非標(biāo)準(zhǔn)字段

可以通過以下兩種方式之一使用非標(biāo)準(zhǔn)字段擴展RFC7807響應(yīng)。

一、ProblemDetail類中有個Map集合的'properties'屬性。在使用Jackson庫時,Spring框架注冊了ProblemDetailJacksonMixin,以確保這個“properties”映射被展開,并在響應(yīng)中作為頂級JSON屬性呈現(xiàn),同樣,反序列化期間的任何未知屬性都會插入到這個Map中。

你還可以擴展ProblemDetail以添加專用的非標(biāo)準(zhǔn)屬性。ProblemDetail中的復(fù)制構(gòu)造函數(shù)允許從現(xiàn)有的ProblemDetail中輕松創(chuàng)建子類。這可以集中完成,例如從@ControllerAdvice,如ResponseEntityExceptionHandler,它將異常的ProblemDetail重新創(chuàng)建到一個具有額外非標(biāo)準(zhǔn)字段的子類中。

ProblemDetail類

public class ProblemDetail {
  private static final URI BLANK_TYPE = URI.create("about:blank");
  private URI type = BLANK_TYPE;
  @Nullable
  private String title;
  private int status;
  @Nullable
  private String detail;
  @Nullable
  private URI instance;
  @Nullable
  private Map<String, Object> properties;
}

測試接口:

@RestController
@RequestMapping("/demo")
public class DemoController {


  @GetMapping("")
  public Object index(Integer age) {
    System.out.println(1 / 0) ;
    return "success" ;
  }
  
}

示例1:

基礎(chǔ)使用

@RestControllerAdvice
public class GlobalExceptionHandler {
  
  // 當(dāng)發(fā)生異常后直接返回ProblemDetail對象
  @ExceptionHandler({Exception.class})
  public ProblemDetail handle(Exception e) {
    ProblemDetail detail = ProblemDetail.forStatusAndDetail(HttpStatusCode.valueOf(500), e.getMessage());
    return detail ;
  }
}

運行結(jié)果:

圖片

示例2:

添加擴展屬性

@RestControllerAdvice
public class GlobalExceptionHandler {
  
  // 這里使用的是ErrorResponse
  @ExceptionHandler({ArithmeticException.class})
  public ErrorResponse handle(Exception e) {
    ErrorResponse errorResponse = new ErrorResponseException(HttpStatusCode.valueOf(500), e) ;
    errorResponse.getBody().setProperty("operator_time", new Date()) ;
    return errorResponse ;
  }
  
}

運行結(jié)果:

圖片

示例3:

繼承自ResponseEntityExceptionHandler該類中定義了@ExceptionHandler注解的方法,能夠處理大多數(shù)常見的異常。

@ControllerAdvice
final class ProblemDetailsExceptionHandler extends ResponseEntityExceptionHandler {
}

ResponseEntityExceptionHandler

public abstract class ResponseEntityExceptionHandler implements MessageSourceAware {
  @ExceptionHandler({
    HttpRequestMethodNotSupportedException.class,
    HttpMediaTypeNotSupportedException.class,
    HttpMediaTypeNotAcceptableException.class,
    MissingPathVariableException.class,
    MissingServletRequestParameterException.class,
    MissingServletRequestPartException.class,
    ServletRequestBindingException.class,
    MethodArgumentNotValidException.class,
    NoHandlerFoundException.class,
    AsyncRequestTimeoutException.class,
    ErrorResponseException.class,
    ConversionNotSupportedException.class,
    TypeMismatchException.class,
    HttpMessageNotReadableException.class,
    HttpMessageNotWritableException.class,
    BindException.class
  })
  @Nullable
  public final ResponseEntity<Object> handleException(Exception ex, WebRequest request) throws Exception {
    if (ex instanceof HttpMessageNotWritableException theEx) {
      return handleHttpMessageNotWritable(theEx, headers, HttpStatus.INTERNAL_SERVER_ERROR, request);
    }
    // ...
  }
  protected ResponseEntity<Object> handleHttpMessageNotWritable(HttpMessageNotWritableException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) {
    ProblemDetail body = createProblemDetail(ex, status, "Failed to write request", null, null, request);
    return handleExceptionInternal(ex, body, headers, status, request);
  }
}

該類是Spring提供的默認(rèn)實現(xiàn),要使用該類是需要通過如下配置開啟:

spring.mvc.problemdetails.enabled=true

處理原理

當(dāng)返回結(jié)果是ProblemDetail或者ErrorResponse時通過如下類進行解析處理:

public class HttpEntityMethodProcessor extends AbstractMessageConverterMethodProcessor {
  public boolean supportsReturnType(MethodParameter returnType) {
    Class<?> type = returnType.getParameterType();
    return ((HttpEntity.class.isAssignableFrom(type) && !RequestEntity.class.isAssignableFrom(type)) || ErrorResponse.class.isAssignableFrom(type) || ProblemDetail.class.isAssignableFrom(type));
  }
  public void handleReturnValue(...) throws Exception {
    HttpEntity<?> httpEntity;
    if (returnValue instanceof ErrorResponse response) {
      httpEntity = new ResponseEntity<>(response.getBody(), response.getHeaders(), response.getStatusCode());
    } else if (returnValue instanceof ProblemDetail detail) {
      httpEntity = ResponseEntity.of(detail).build();
    }
    if (httpEntity.getBody() instanceof ProblemDetail detail) {
      if (detail.getInstance() == null) {
        URI path = URI.create(inputMessage.getServletRequest().getRequestURI());
        detail.setInstance(path);
      }
    }
    // ...
    writeWithMessageConverters(httpEntity.getBody(), returnType, inputMessage, outputMessage);
    outputMessage.flush();
  }
}

以上就是ProblemDetail在Spring中的實現(xiàn)原理。

責(zé)任編輯:武曉燕 來源: 實戰(zhàn)案例錦集
相關(guān)推薦

2023-08-07 14:28:07

SpringBoot工具

2023-08-09 08:29:51

SpringWeb編程

2010-01-05 09:26:13

.NET 4.0

2010-10-12 09:52:02

ASP.NET MVC

2023-02-01 10:40:01

2013-07-29 15:13:35

2025-04-16 10:03:40

開發(fā)Spring應(yīng)用程序

2024-10-08 08:26:43

2023-08-11 08:59:49

分庫分表數(shù)據(jù)數(shù)據(jù)庫

2022-10-26 07:14:25

Spring 6Spring業(yè)務(wù)

2009-07-27 09:46:28

Silverlight

2009-06-29 17:42:03

Tapestry5新特

2012-01-09 16:00:56

2010-10-08 14:32:32

ASP.NET MVCNuPack

2023-08-08 08:23:08

Spring日志?線程池

2024-09-11 09:15:06

2024-07-31 14:03:00

Spring定時任務(wù)管理

2009-02-04 17:33:24

ibmdwPython

2011-02-21 16:39:47

Android 2.3Android R5

2010-06-23 15:29:52

Eclipse 3.6Java
點贊
收藏

51CTO技術(shù)棧公眾號

欧美老女人在线视频| 久久国际精品| caoporen国产精品视频| 欧美一区二区三区……| 午夜国产福利视频| 福利电影一区| 91成人国产精品| 少妇熟女一区二区| 五月婷婷丁香花| 日韩av在线免费观看不卡| 久久久成人av| 国产精品无码毛片| 小说区图片区亚洲| 精品国产乱码久久久久酒店 | 国产精品综合在线| 国产精品久久久久久模特| 中国人与牲禽动交精品| 日本在线不卡一区二区| 四虎精品在线观看| 精品动漫一区二区| 超薄肉色丝袜足j调教99| 男女网站在线观看| 懂色av一区二区三区免费观看| 国产精品黄页免费高清在线观看| 国产精品自拍视频一区| 久久一区二区三区电影| 亚洲精品有码在线| 亚洲图片欧美另类| 动漫一区二区三区| 欧美日韩专区在线| 99精品免费在线观看| 美足av综合网| 亚洲人被黑人高潮完整版| 日本精品一区二区| 亚州精品国产精品乱码不99按摩| 国产毛片精品视频| 成人a级免费视频| 国产精品第六页| 性色一区二区三区| 97在线视频国产| 久久久久无码国产精品 | 91成人综合网| 国产精品久久麻豆| 亚洲欧洲另类国产综合| 亚洲激情图片| 不卡在线视频| 欧美国产成人在线| 色一情一乱一伦一区二区三区丨 | 日本国产在线播放| 麻豆av在线播放| 一区二区在线电影| 久久久久久久久久久综合| 国产日产一区二区三区| 最好看的中文字幕久久| 欧美性受xxxx黑人猛交88| 麻豆最新免费在线视频| 亚洲人吸女人奶水| 日本中文字幕一级片| 亚洲资源一区| 亚洲综合色成人| 17c丨国产丨精品视频| 在线黄色网页| 亚洲国产一二三| 全黄性性激高免费视频| 9999精品成人免费毛片在线看| 亚洲国产成人高清精品| 男人和女人啪啪网站| 在线看片国产福利你懂的| 色噜噜狠狠色综合欧洲selulu| 欧美少妇性生活视频| 日本一区二区三区视频在线| 欧美最新大片在线看| 亚洲精品视频导航| 国产一区二区高清在线| 日韩精品专区在线影院重磅| 秘密基地免费观看完整版中文 | 国产v片免费观看| 黑人巨大精品欧美一区二区桃花岛| 日韩欧美国产成人| 免费看a级黄色片| 亚洲欧美在线人成swag| 精品久久人人做人人爽| 亚洲久久久久久| 日韩电影免费网址| 欧美日韩国产91| 日本韩国欧美中文字幕| 美腿丝袜在线亚洲一区| 91手机在线视频| 秋霞av在线| 亚洲丝袜另类动漫二区| 丁香花在线影院观看在线播放 | 91久久免费观看| 波多野结衣国产精品| 久久夜色精品国产噜噜av小说| 亚洲欧美日韩精品久久亚洲区| 国产亚洲精品久久久久久豆腐| 国模吧视频一区| 国产成人一区二区| 亚洲男人第一天堂| 欧美精彩视频一区二区三区| 黑人巨茎大战欧美白妇| 日本一区二区电影| 亚洲成人亚洲激情| 亚洲精品自拍视频在线观看| 亚洲美女少妇无套啪啪呻吟| 国产免费一区二区三区在线观看| 蜜桃av中文字幕| 中文字幕第一区| 国产黄页在线观看| 精品国产三区在线| 国产亚洲人成网站在线观看| 国产一级做a爰片在线看免费| 奇米综合一区二区三区精品视频| 99re在线| 日本欧美在线视频免费观看| 色国产精品一区在线观看| 中文字幕人妻熟女人妻a片| 欧美日韩国产高清电影| 97香蕉超级碰碰久久免费的优势| 国产黄a三级三级看三级| 国产农村妇女毛片精品久久麻豆 | 蜜臀av性久久久久蜜臀aⅴ四虎| 国产女主播一区二区三区| 日p在线观看| 在线观看亚洲专区| 野花社区视频在线观看| 国产在线成人| 91九色精品视频| 黄色av网址在线免费观看| 精品久久久久久亚洲精品| 99热这里只有精品2| 欧美freesextv| 国产精品久久久久9999| 每日更新av在线播放| 精品福利视频导航| 人妻无码中文久久久久专区| 亚洲先锋成人| 99久久99久久精品国产片| 岛国中文字幕在线| 91精品国产欧美日韩| 99热在线观看精品| 久久激情五月激情| 亚洲视频小说| 日韩欧国产精品一区综合无码| 一本色道久久88精品综合| 免费av网站在线| 91免费观看视频在线| 午夜精品久久久久久久无码 | 国产伦精品一区二区三区免费迷| 亚洲一区综合| 亚洲伊人精品酒店| 久久久国产91| 国产激情视频在线播放| 亚洲综合网站在线观看| 野战少妇38p| 亚洲毛片一区| 久久综合中文色婷婷| 欧美精品高清| 中文字幕亚洲无线码a| 亚洲熟妇无码久久精品| 国产精品久久毛片a| 第一区免费在线观看| 999国产精品永久免费视频app| 国产美女搞久久| 1769免费视频在线观看| 亚洲国产精品999| 日韩黄色在线播放| 国产日韩欧美制服另类| 欧美视频国产视频| 国内一区二区三区| 欧美二区三区| 日本中文字幕视频一区| 欧美激情图片区| 亚洲AV第二区国产精品| 欧美性一区二区| 裸体武打性艳史| jiyouzz国产精品久久| 一本色道无码道dvd在线观看| 人人狠狠综合久久亚洲婷| 51成人做爰www免费看网站| 爱情岛论坛亚洲品质自拍视频网站 | 欧美华人在线视频| 亚洲av成人无码久久精品老人 | 国产精品一区二区三| 91极品在线| 亚洲女人天堂网| 国产裸体永久免费无遮挡| 亚洲成av人**亚洲成av**| 中文字幕一区二区三区人妻不卡| 美女网站在线免费欧美精品| 国产在线视频综合| 成人精品电影| av免费精品一区二区三区| 正在播放日韩精品| 久久夜色精品亚洲噜噜国产mv| 婷婷开心激情网| 7777精品伊人久久久大香线蕉的| 成人免费看片98| 中文字幕欧美日韩一区| 久久久久亚洲av成人网人人软件| 日本中文一区二区三区| 乱熟女高潮一区二区在线| 欧美日韩高清| 久久久久成人精品免费播放动漫| 91麻豆精品国产综合久久久| 26uuu另类亚洲欧美日本一 | 国产一区国产二区国产三区| 91久久夜色精品国产网站| 一区二区乱码| 久久久久久久色| 黄色在线观看网站| 亚洲图中文字幕| 污污视频在线观看网站| 91精品国产麻豆国产自产在线| 国产一区二区视频网站| 亚洲va欧美va人人爽午夜| 裸体武打性艳史| 国产精品初高中害羞小美女文| 亚洲AV无码国产精品| 国产suv精品一区二区883| 中文字幕在线观看日| 奇米在线7777在线精品| 麻豆av免费在线| 国产精品毛片| 阿v天堂2017| 影院欧美亚洲| 国产aaa免费视频| 亚洲国产不卡| 亚洲最新免费视频| 爽成人777777婷婷| 亚洲一区二区在线看| 国产在线日韩精品| 秋霞在线观看一区二区三区| 日韩精选在线| 精品高清视频| 日韩激情网站| 久久精品丝袜高跟鞋| 久久久免费毛片| 国产精品一级久久久| 91亚洲无吗| 国产精品久久波多野结衣| 97久久亚洲| 国产精品99久久久久久久| 91精品国产乱码久久久竹菊| 97se亚洲综合| caoporn成人| 国产伦精品一区二区三区免| 国产毛片久久久| 精品国产中文字幕| 九九在线精品| 四虎一区二区| 99久久99久久精品国产片果冰| 亚洲欧美久久234| 99久久99久久精品国产片桃花| 中文字幕欧美人与畜| 中文乱码免费一区二区三区下载| 天天做天天爱天天高潮| 欧美xxx在线观看| 97超碰国产精品| 国产情侣一区| 成人免费xxxxx在线视频| 免费高清在线视频一区·| 国内自拍第二页| 风间由美性色一区二区三区| 中文在线永久免费观看| 国产亚洲福利社区一区| 久草手机视频在线观看| 亚洲一区二区三区自拍| 羞羞影院体验区| 在线观看视频一区二区| 国产精品久久777777换脸| 欧美成人video| 免费黄色在线视频网站| 色伦专区97中文字幕| 18网站在线观看| 欧洲成人免费aa| 欧美久久久网站| av成人免费观看| 免费看成人哺乳视频网站| 亚洲一区不卡在线| 国内精品嫩模av私拍在线观看| 黄色免费福利视频| 久久成人免费网站| 美女露出粉嫩尿囗让男人桶| 久久精品一区二区| 麻豆影视在线播放| 91久久精品日日躁夜夜躁欧美| 国产精品视频无码| 亚洲国产美女精品久久久久∴| 成人高清在线| 久久久在线观看| 国产精品伦一区二区| 国产91精品入口17c| 日本不卡电影| 青青视频在线播放| 国内不卡的二区三区中文字幕| 女同毛片一区二区三区| 亚洲三级电影全部在线观看高清| 久久夜靖品2区| 3d动漫精品啪啪1区2区免费| 色久视频在线播放| 欧美成人在线影院| jizz免费一区二区三区| 精品久久精品久久| 欧美.日韩.国产.一区.二区| 日本黄网站免费| 成人午夜短视频| 国产稀缺精品盗摄盗拍| 一道本成人在线| 黄色aaa毛片| 精品国产依人香蕉在线精品| 姬川优奈av一区二区在线电影| 国产不卡一区二区在线观看| 久久人体视频| www日韩在线观看| 91亚洲精华国产精华精华液| 欧美色图一区二区| 欧美精品粉嫩高潮一区二区| 国产在线视频网站| 欧美亚洲激情在线| 成人av动漫| 4444在线观看| 精品一区二区在线播放| av永久免费观看| 色婷婷精品久久二区二区蜜臂av | 天堂在线资源视频| 26uuu欧美日本| 久久久国产高清| 精品国产一区二区三区忘忧草| 黄色在线免费看| 91久久精品国产91久久性色| 91麻豆国产自产在线观看亚洲 | 激情亚洲小说| 亚洲春色在线视频| 奇米亚洲午夜久久精品| 少妇太紧太爽又黄又硬又爽小说 | 国产wwwxxx| 免费不卡在线观看av| 91精品福利观看| 久久久久久久久影视| 国产黄色精品网站| 亚洲av鲁丝一区二区三区| 91麻豆精品国产91久久久使用方法| www视频在线观看免费| 国产精品久久久久久久久久东京| 深爱激情久久| 色综合天天色综合| 中文久久乱码一区二区| 一级片免费网站| 久久国产精彩视频| 伊人久久影院| 亚洲熟妇无码一区二区三区| 99久久精品免费| 伦av综合一区| 色爱av美腿丝袜综合粉嫩av| 亚州欧美在线| 日本高清视频免费在线观看| 国产ts人妖一区二区| 久久久久久久黄色片| 亚洲深夜福利在线| 国产精品无码久久久久| 97精品国产97久久久久久粉红| 国产成人精品免费看| 国产精品成人久久| 亚洲老头老太hd| 久久婷婷五月综合色丁香| www.99riav| 99re8在线精品视频免费播放| 波多野结衣网站| 久久精品久久久久久国产 免费| 国产亚洲高清一区| 无码精品a∨在线观看中文| 久久久不卡网国产精品二区| 国产一区二区三区三州| 欧美日韩xxx| 九九热精品视频在线观看| 日本中文字幕影院| 亚洲午夜免费福利视频| 免费一级在线观看| 亚洲xxx视频| 国产精品一区亚洲| 黄色香蕉视频在线观看| 亚洲国内高清视频| 日本久久久久| 成人免费播放器| 国产精品久久午夜夜伦鲁鲁| 欧美特黄一级视频| 国产日韩av在线| 在线观看一区| av在线免费播放网址| 日韩av影视在线| 亚洲国产伊人| 1024av视频| 亚洲黄一区二区三区| 性xxxx搡xxxxx搡欧美| 91国产丝袜在线放| 日日骚欧美日韩| 日本三级免费看| 精品国产欧美一区二区三区成人| 秋霞蜜臀av久久电影网免费|