久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

詳解SpringBoot如何統(tǒng)一后端返回格式

瀏覽:140日期:2023-02-24 16:29:14
目錄為什么要對(duì)SpringBoot返回統(tǒng)一的標(biāo)準(zhǔn)格式第一種:返回 String第二種:返回自定義對(duì)象第三種:接口異常定義返回標(biāo)準(zhǔn)格式高級(jí)實(shí)現(xiàn)方式接口異常問題SpringBoot為什么需要全局異常處理器體驗(yàn)效果全局異常接入返回的標(biāo)準(zhǔn)格式

今天我們來聊一聊在基于SpringBoot前后端分離開發(fā)模式下,如何友好的返回統(tǒng)一的標(biāo)準(zhǔn)格式以及如何優(yōu)雅的處理全局異常。

首先我們來看看為什么要返回統(tǒng)一的標(biāo)準(zhǔn)格式?

為什么要對(duì)SpringBoot返回統(tǒng)一的標(biāo)準(zhǔn)格式

在默認(rèn)情況下,SpringBoot的返回格式常見的有三種:

第一種:返回 String

@GetMapping('/hello')public String getStr(){ return 'hello,javadaily';}

此時(shí)調(diào)用接口獲取到的返回值是這樣:

hello,javadaily

第二種:返回自定義對(duì)象

@GetMapping('/aniaml')public Aniaml getAniaml(){ Aniaml aniaml = new Aniaml(1,'pig'); return aniaml;}

此時(shí)調(diào)用接口獲取到的返回值是這樣:

{ 'id': 1, 'name': 'pig'}第三種:接口異常

@GetMapping('/error')public int error(){ int i = 9/0; return i;}

此時(shí)調(diào)用接口獲取到的返回值是這樣:

{ 'timestamp': '2021-07-08T08:05:15.423+00:00', 'status': 500, 'error': 'Internal Server Error', 'path': '/wrong'}

基于以上種種情況,如果你和前端開發(fā)人員聯(lián)調(diào)接口她們就會(huì)很懵逼,由于我們沒有給他一個(gè)統(tǒng)一的格式,前端人員不知道如何處理返回值。

還有甚者,有的同學(xué)比如小張喜歡對(duì)結(jié)果進(jìn)行封裝,他使用了Result對(duì)象,小王也喜歡對(duì)結(jié)果進(jìn)行包裝,但是他卻使用的是Response對(duì)象,當(dāng)出現(xiàn)這種情況時(shí)我相信前端人員一定會(huì)抓狂的。

所以我們項(xiàng)目中是需要定義一個(gè)統(tǒng)一的標(biāo)準(zhǔn)返回格式的。

定義返回標(biāo)準(zhǔn)格式

一個(gè)標(biāo)準(zhǔn)的返回格式至少包含3部分:

status 狀態(tài)值:由后端統(tǒng)一定義各種返回結(jié)果的狀態(tài)碼 message 描述:本次接口調(diào)用的結(jié)果描述 data 數(shù)據(jù):本次返回的數(shù)據(jù)

{ 'status':'100', 'message':'操作成功', 'data':'hello,javadaily'}

當(dāng)然也可以按需加入其他擴(kuò)展值,比如我們就在返回對(duì)象中添加了接口調(diào)用時(shí)間

timestamp: 接口調(diào)用時(shí)間

定義返回對(duì)象

@Datapublic class ResultData<t> { /** 結(jié)果狀態(tài) ,具體狀態(tài)碼參見ResultData.java*/ private int status; private String message; private T data; private long timestamp ; public ResultData (){ this.timestamp = System.currentTimeMillis(); } public static <t> ResultData<t> success(T data) { ResultData<t> resultData = new ResultData<>(); resultData.setStatus(ReturnCode.RC100.getCode()); resultData.setMessage(ReturnCode.RC100.getMessage()); resultData.setData(data); return resultData; } public static <t> ResultData<t> fail(int code, String message) { ResultData<t> resultData = new ResultData<>(); resultData.setStatus(code); resultData.setMessage(message); return resultData; }}

定義狀態(tài)碼

public enum ReturnCode { /**操作成功**/ RC100(100,'操作成功'), /**操作失敗**/ RC999(999,'操作失敗'), /**服務(wù)限流**/ RC200(200,'服務(wù)開啟限流保護(hù),請(qǐng)稍后再試!'), /**服務(wù)降級(jí)**/ RC201(201,'服務(wù)開啟降級(jí)保護(hù),請(qǐng)稍后再試!'), /**熱點(diǎn)參數(shù)限流**/ RC202(202,'熱點(diǎn)參數(shù)限流,請(qǐng)稍后再試!'), /**系統(tǒng)規(guī)則不滿足**/ RC203(203,'系統(tǒng)規(guī)則不滿足要求,請(qǐng)稍后再試!'), /**授權(quán)規(guī)則不通過**/ RC204(204,'授權(quán)規(guī)則不通過,請(qǐng)稍后再試!'), /**access_denied**/ RC403(403,'無訪問權(quán)限,請(qǐng)聯(lián)系管理員授予權(quán)限'), /**access_denied**/ RC401(401,'匿名用戶訪問無權(quán)限資源時(shí)的異常'), /**服務(wù)異常**/ RC500(500,'系統(tǒng)異常,請(qǐng)稍后重試'), INVALID_TOKEN(2001,'訪問令牌不合法'), ACCESS_DENIED(2003,'沒有權(quán)限訪問該資源'), CLIENT_AUTHENTICATION_FAILED(1001,'客戶端認(rèn)證失敗'), USERNAME_OR_PASSWORD_ERROR(1002,'用戶名或密碼錯(cuò)誤'), UNSUPPORTED_GRANT_TYPE(1003, '不支持的認(rèn)證模式'); /**自定義狀態(tài)碼**/ private final int code; /**自定義描述**/ private final String message; ReturnCode(int code, String message){this.code = code;this.message = message; } public int getCode() {return code; } public String getMessage() {return message; }}

統(tǒng)一返回格式

@GetMapping('/hello')public ResultData<string> getStr(){return ResultData.success('hello,javadaily');}

此時(shí)調(diào)用接口獲取到的返回值是這樣:

{ 'status': 100, 'message': 'hello,javadaily', 'data': null, 'timestamp': 1625736481648, 'httpStatus': 0}

這樣確實(shí)已經(jīng)實(shí)現(xiàn)了我們想要的結(jié)果,我在很多項(xiàng)目中看到的都是這種寫法,在Controller層通過ResultData.success()對(duì)返回結(jié)果進(jìn)行包裝后返回給前端。

看到這里我們不妨停下來想想,這樣做有什么弊端呢?

最大的弊端就是我們后面每寫一個(gè)接口都需要調(diào)用ResultData.success()這行代碼對(duì)結(jié)果進(jìn)行包裝,重復(fù)勞動(dòng),浪費(fèi)體力;而且還很容易被其他老鳥給嘲笑。

所以呢我們需要對(duì)代碼進(jìn)行優(yōu)化,目標(biāo)就是不要每個(gè)接口都手工制定ResultData返回值。

高級(jí)實(shí)現(xiàn)方式

要優(yōu)化這段代碼很簡單,我們只需要借助SpringBoot提供的ResponseBodyAdvice即可。

ResponseBodyAdvice的作用:攔截Controller方法的返回值,統(tǒng)一處理返回值/響應(yīng)體,一般用來統(tǒng)一返回格式,加解密,簽名等等。

先來看下ResponseBodyAdvice的源碼:

public interface ResponseBodyAdvice<t> {/*** 是否支持advice功能* true 支持,false 不支持*/ boolean supports(MethodParameter var1, Class<!--? extends HttpMessageConverter<?-->> var2); /*** 對(duì)返回的數(shù)據(jù)進(jìn)行處理*/ @Nullable T beforeBodyWrite(@Nullable T var1, MethodParameter var2, MediaType var3, Class<!--? extends HttpMessageConverter<?-->> var4, ServerHttpRequest var5, ServerHttpResponse var6);}

我們只需要編寫一個(gè)具體實(shí)現(xiàn)類即可

/** * @author jam * @date 2021/7/8 10:10 上午 */@RestControllerAdvicepublic class ResponseAdvice implements ResponseBodyAdvice<object> { @Autowired private ObjectMapper objectMapper; @Override public boolean supports(MethodParameter methodParameter, Class<!--? extends HttpMessageConverter<?-->> aClass) {return true; } @SneakyThrows @Override public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<!--? extends HttpMessageConverter<?-->> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {if(o instanceof String){ return objectMapper.writeValueAsString(ResultData.success(o));}return ResultData.success(o); }}

需要注意兩個(gè)地方:

@RestControllerAdvice注解

@RestControllerAdvice是@RestController注解的增強(qiáng),可以實(shí)現(xiàn)三個(gè)方面的功能:

全局異常處理 全局?jǐn)?shù)據(jù)綁定全 局?jǐn)?shù)據(jù)預(yù)處理

String類型判斷

if(o instanceof String){ return objectMapper.writeValueAsString(ResultData.success(o));}

這段代碼一定要加,如果Controller直接返回String的話,SpringBoot是直接返回,故我們需要手動(dòng)轉(zhuǎn)換成json。

經(jīng)過上面的處理我們就再也不需要通過ResultData.success()來進(jìn)行轉(zhuǎn)換了,直接返回原始數(shù)據(jù)格式,SpringBoot自動(dòng)幫我們實(shí)現(xiàn)包裝類的封裝。

@GetMapping('/hello')public String getStr(){ return 'hello,javadaily';}

此時(shí)我們調(diào)用接口返回的數(shù)據(jù)結(jié)果為:

@GetMapping('/hello')public String getStr(){ return 'hello,javadaily';}

是不是感覺很完美,別急,還有個(gè)問題在等著你呢。

接口異常問題

此時(shí)有個(gè)問題,由于我們沒對(duì)Controller的異常進(jìn)行處理,當(dāng)我們調(diào)用的方法一旦出現(xiàn)異常,就會(huì)出現(xiàn)問題,比如下面這個(gè)接口

@GetMapping('/wrong')public int error(){ int i = 9/0; return i;}

返回的結(jié)果為:

詳解SpringBoot如何統(tǒng)一后端返回格式

這顯然不是我們想要的結(jié)果,接口都報(bào)錯(cuò)了還返回操作成功的響應(yīng)碼,前端看了會(huì)打人的。

別急,接下來我們進(jìn)入第二個(gè)議題,如何優(yōu)雅的處理全局異常。

SpringBoot為什么需要全局異常處理器

不用手寫try...catch,由全局異常處理器統(tǒng)一捕獲

使用全局異常處理器最大的便利就是程序員在寫代碼時(shí)不再需要手寫try...catch了,前面我們講過,默認(rèn)情況下SpringBoot出現(xiàn)異常時(shí)返回的結(jié)果是這樣:

{ 'timestamp': '2021-07-08T08:05:15.423+00:00', 'status': 500, 'error': 'Internal Server Error', 'path': '/wrong'}

這種數(shù)據(jù)格式返回給前端,前端是看不懂的,所以這時(shí)候我們一般通過try...catch來處理異常

@GetMapping('/wrong')public int error(){ int i; try{i = 9/0; }catch (Exception e){log.error('error:{}',e);i = 0; } return i;}

我們追求的目標(biāo)肯定是不需要再手動(dòng)寫try...catch了,而是希望由全局異常處理器處理。

對(duì)于自定義異常,只能通過全局異常處理器來處理

@GetMapping('error1')public void empty(){throw new RuntimeException('自定義異常');}

當(dāng)我們引入Validator參數(shù)校驗(yàn)器的時(shí)候,參數(shù)校驗(yàn)不通過會(huì)拋出異常,此時(shí)是無法用try...catch捕獲的,只能使用全局異常處理器。

SpringBoot集成參數(shù)校驗(yàn)請(qǐng)參考這篇文章SpringBoot開發(fā)秘籍 - 集成參數(shù)校驗(yàn)及高階技巧

如何實(shí)現(xiàn)全局異常處理器

@Slf4j@RestControllerAdvicepublic class RestExceptionHandler { /** * 默認(rèn)全局異常處理。 * @param e the e * @return ResultData */ @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ResultData<string> exception(Exception e) {log.error('全局異常信息 ex={}', e.getMessage(), e);return ResultData.fail(ReturnCode.RC500.getCode(),e.getMessage()); }}

有三個(gè)細(xì)節(jié)需要說明一下:

@RestControllerAdvice,RestController的增強(qiáng)類,可用于實(shí)現(xiàn)全局異常處理器 @ExceptionHandler,統(tǒng)一處理某一類異常,從而減少代碼重復(fù)率和復(fù)雜度,比如要獲取自定義異常可以@ExceptionHandler(BusinessException.class) @ResponseStatus指定客戶端收到的http狀態(tài)碼體驗(yàn)效果

這時(shí)候我們調(diào)用如下接口:

@GetMapping('error1')public void empty(){ throw new RuntimeException('自定義異常');}

返回的結(jié)果如下:

{ 'status': 500, 'message': '自定義異常', 'data': null, 'timestamp': 1625795902556}

基本滿足我們的需求了。

但是當(dāng)我們同時(shí)啟用統(tǒng)一標(biāo)準(zhǔn)格式封裝功能ResponseAdvice和RestExceptionHandler全局異常處理器時(shí)又出現(xiàn)了新的問題:

{ 'status': 100, 'message': '操作成功', 'data': { 'status': 500, 'message': '自定義異常', 'data': null, 'timestamp': 1625796167986 }, 'timestamp': 1625796168008}

此時(shí)返回的結(jié)果是這樣,統(tǒng)一格式增強(qiáng)功能會(huì)給返回的異常結(jié)果再次封裝,所以接下來我們需要解決這個(gè)問題。

全局異常接入返回的標(biāo)準(zhǔn)格式

要讓全局異常接入標(biāo)準(zhǔn)格式很簡單,因?yàn)槿之惓L幚砥饕呀?jīng)幫我們封裝好了標(biāo)準(zhǔn)格式,我們只需要直接返回給客戶端即可。

@SneakyThrows@Overridepublic Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<!--? extends HttpMessageConverter<?-->> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { if(o instanceof String){ return objectMapper.writeValueAsString(ResultData.success(o)); } if(o instanceof ResultData){ return o; } return ResultData.success(o);}

關(guān)鍵代碼:

if(o instanceof ResultData){ return o;}

如果返回的結(jié)果是ResultData對(duì)象,直接返回即可。

這時(shí)候我們?cè)僬{(diào)用上面的錯(cuò)誤方法,返回的結(jié)果就符合我們的要求了。

{ 'status': 500, 'message': '自定義異常', 'data': null, 'timestamp': 1625796580778}

好了,今天的文章就到這里了,希望通過這篇文章你能掌握如何在你項(xiàng)目中友好實(shí)現(xiàn)統(tǒng)一標(biāo)準(zhǔn)格式到返回并且可以優(yōu)雅的處理全局異常。

github地址:https://github.com/jianzh5/cloud-blog/

到此這篇關(guān)于詳解SpringBoot如何統(tǒng)一后端返回格式的文章就介紹到這了,更多相關(guān)SpringBoot 統(tǒng)一后端返回格式內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 国产综合视频在线观看 | 亚洲精品1区2区 | 日本一区二区三区四区视频 | 羞羞视频免费观看 | 国产欧美综合一区二区三区 | 99精品一区二区三区 | 久久久久久久 | 亚洲国产精品成人无久久精品 | 国产成人在线一区二区 | 高清免费av| 一区二区精品视频 | 91精品欧美久久久久久久 | 中国妞xxxhd露脸偷拍视频 | 国产精品美女久久久久久免费 | 欧美久久精品 | 性毛片| 国产伦精品一区二区 | 亚洲一区中文字幕 | 精品国产91乱码一区二区三区 | 999国产在线观看 | 婷婷免费在线观看 | 午夜午夜精品一区二区三区文 | 欧洲一级毛片 | 成人在线播放 | av一区二区在线观看 | 国产精品美女视频一区二区三区 | 婷婷久久五月天 | 国产色在线观看 | 三级免费毛片 | 精品日韩欧美 | 亚洲欧美日韩另类精品一区二区三区 | 日本精品一区二区三区在线观看 | 青青草在线视频免费观看 | 久久机热| 一区二区三区精品视频免费看 | 国产视频久久久久 | 黄色毛片在线观看 | 国产 欧美 日韩 一区 | 日韩欧美在线一区 | 久久久久久久久国产 | 91精品久久久久久久久久久 | 一区免费看 | 中文字幕三区 | 黄色一级网站 | 成人黄色免费 | 免费午夜电影 | 久久久国产一区二区三区 | 一区二区免费视频 | 天天综合欧美 | 99精品一区二区三区 | 在线播放91| 免费高潮视频95在线观看网站 | 日本精品视频在线观看 | 久久精品1区2区 | 国内精品一区二区 | 欧美日韩不卡在线 | 国产欧美一区二区三区在线看 | 久久精品亚洲欧美日韩精品中文字幕 | 欧美二区在线 | 亚洲一区二区在线视频 | 国产美女一区二区 | 欧美成人免费网站 | 欧美午夜精品久久久久久人妖 | 色视频网站在线观看 | 亚洲成人毛片 | 黄色a视频 | 久久精品国产一区 | 日韩中文一区二区三区 | 国产亚洲精品久久久456 | 亚洲国产精品久久久久久 | 国产综合精品视频 | 久久亚洲视频 | 81精品国产乱码久久久久久 | 欧美一区二区三区在线 | 男女视频一区二区 | 成人精品福利视频 | 国产精品一区一区 | 国产精品久久久久久久久久久久 | 国产精品丝袜视频 | jizzjizz亚洲中国少妇 | 黄毛片网站 | 天天摸天天摸 | 最新超碰| 中文字幕 视频一区 | 偷偷干夜夜拍 | 欧美激情a∨在线视频播放 成人免费共享视频 | 国产美女在线播放 | 国产色av| 五月在线视频 | 美女久久久久 | 欧美久久久久久久久久久久久久 | 国产中文一区 | 欧美猛交ⅹxxx乱大交视频 | 人人艹人人爽 | 99福利视频 | 男人久久天堂 | 免费av一区 | 91免费在线视频 | 人和拘一级毛片 | 日中文字幕在线 | 互换娇妻呻吟hd中文字幕 | 久久91精品 | 中文字幕自拍偷拍 | 羞视频在线观看 | 久久久99精品免费观看 | 国产乱码精品一区二区三区中文 | 亚洲精品aaa | 成人在线免费观看 | 久久精品在线视频 | 久日精品 | 日韩午夜电影在线观看 | 日本精品一区二区在线观看 | 国产乱码精品一区二区三区av | 国产乱码精品一区二区三区av | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 国产精品一区二区av | 成人一区电影 | a欧美| 中文字幕电影在线 | 精品国产31久久久久久 | 国产在线观看一区 | 丁香婷婷在线 | 午夜三级在线 | 91在线高清 | 日日摸天天爽天天爽视频 | 国产精品456在线影视 | 亚洲aⅴ网站 | 久久久精品久久久久 | 欧美日韩一级电影 | 成人激情免费视频 | 精品久久99 | 97超碰在线免费 | 亚洲视频在线看 | 日韩欧美在线观看视频 | www.国产在线 | 免费欧美| 91免费在线视频 | av在线免费观看一区二区 | 国产激情精品一区二区三区 | 亚洲视频在线观看网站 | 国产免费av一区二区三区 | 一区二区三区四区日韩 | 狠狠狠色丁香婷婷综合久久五月 | 91精品国产自产精品男人的天堂 | 国产在线精品一区二区 | 操操操影院| 日韩久久精品一区二区 | 男人天堂99| 国产精品免费视频一区 | 亚洲九九| 美女操网站 | 真人女人一级毛片免费播放 | 日本视频中文字幕 | 九九精品在线 | 在线视频一区二区三区 | 91在线看片| 自拍偷拍第一页 | 日韩欧美中文在线 | 国产大学生援交视频在线观看 | 久久国产精品免费一区二区三区 | 国产精国产精品 | 国产一区二区三区久久 | 91网站在线看| 久久精品不卡 | 日韩av在线不卡 | 国产韩国精品一区二区三区 | 中文字幕亚洲一区 | 久久男人 | 久久这里只有精品8 | 91久久久久久 | 国产免费自拍av | 欧美成人综合在线 | 色先锋资源 | 日韩精品在线观看一区 | 欧美日一区二区 | 久久精品性视频 | 国产成人精品一区二区三区四区 | 精品一区二区久久久久久久网站 | 午夜精品久久久久 | www.一级电影 | 色综合天天综合网国产成人网 | 国产福利在线播放 | 亚洲免费人成在线视频观看 | 久久久久久国产精品mv | 亚洲一区二区三区免费在线观看 | 在线观看中文字幕 | 九九精品免费视频 | 久久中文字幕一区二区三区 | 99久久99久久精品国产片果冻 | 日韩欧美一区二区三区久久婷婷 | 久久99精品久久久久久青青日本 | 色婷婷久久久swag精品 | 国产精品久久久久久婷婷天堂 | 国产精一区二区 | 日韩在线播放一区二区三区 | 精品视频网站 | 久久精彩视频 | 香港三级日本三级a视频 | 日韩精品一91爱爱 | 亚洲一区二区三区免费在线观看 | 一区二区三区在线播放 | 日本精品视频在线播放 | 欧美日韩一区在线 | 国产成人 综合 亚洲 | 91精品国产综合久久久亚洲 | www.久久久 | 操操操夜夜操 | 美女超碰 | 国产自在现线2019 | 91视频8mav | 91中文字幕在线 | 国产高清在线精品 | 亚洲一区中文字幕 | 国产精品久久久久久久久久东京 | 亚洲精品自在在线观看 | 一级毛片视频 | 国产伦精品一区二区三区四区视频 | 91精品久久久久久久久中文字幕 | 久久另类ts人妖一区二区 | 亚洲第一区国产精品 | 亚洲伦理| 日韩视频在线免费播放 | 国产xvideos免费视频播放 | 亚洲国产精品成人 | 成人精品视频在线观看 | 欧美一级视频在线观看 | 国产一级大片 | 国产精品国产三级国产aⅴ无密码 | 成人网av | 国产99精品 | av在线播放国产 | 一级二级在线观看 | 风间由美一区二区三区在线观看 | 成人午夜视频在线观看 | 久久精品亚洲精品 | 久久精品久久久久久 | 99精品久久久| 欧美精品成人一区二区三区四区 | 国产一页| 一级毛片免费观看 | 久久久久久久久国产 | 精品专区| 午夜精品久久久久久久星辰影院 | 亚洲无吗电影 | 免费网站看v片在线a | 国产一区二区三区在线 | av一二三区 | 日韩综合一区 | 精品九九久久 | 色视频网站免费看 | 欧美视频综合 | 国产精品99久久久久久动医院 | 久久亚洲一区 | 免费久久99精品国产婷婷六月 | 日韩久久精品电影 | 久久久一 | 日本在线观看一区 | 欧美精品久久久久久久久 | 黄a在线看 | 国产一区二区三区免费看 | 黄色小视频在线观看 | 久久99精品久久久久久琪琪 | 精品一级 | 国产精品久久久久久久久久 | 日韩精品一区二区三区中文字幕 | 日本在线观看www | 欧美日韩国产在线看 | 免费成人在线电影 | 国产97免费视频 | 久久人人爽人人爽人人片av高清 | 国产真实乱全部视频 | 日韩精品一区二区三区在线播放 | 中文字幕乱码一区二区三区 | 欧美一区二区三区xxxx监狱 | 一区网站 | 亚洲精品日本 | 亚洲国产精久久久久久久 | 亚洲综合二 | 精品久久久久久久 | 午夜精品久久久久久久久久久久 | 在线国产欧美 | 日本丶国产丶欧美色综合 | 黄色大片在线播放 | 日韩看片 | 亚洲人成网站999久久久综合 | 日韩精品免费在线观看 | 国产成人精品一区二区三区四区 | 日日夜夜草 | 第四色影音先锋 | 国产亚洲欧美一区 | 日韩欧美在线综合 | 在线观看国产wwwa级羞羞视频 | 精品久久久久久久 | 日本精品免费 | 午夜在线一区 | 免费看片一区二区三区 | 国产亚洲精品久久久闺蜜 | 小草av| 免费激情av| 91亚洲国产成人久久精品网站 | 在线第一页 | 亚洲人人 | 一区二区中文字幕 | 国产精品亚洲一区二区三区在线 | 日韩成人精品 | 欧美久久久久久久久久久久久久 | 俺要去97中文字幕 | 超碰人人爱| www.欧美 | 九九天堂网 | 国产区在线 | 日本中文字幕视频 | 日韩中文字幕欧美 | 成人h视频| 国产一区二区三区在线免费 | 欧美国产日韩一区二区 | 播放一级黄色片 | 国产免费拔擦拔擦8x高清在线人 | 日韩精品一二三 | 操视频网站 | 亚洲午夜视频在线观看 | 国产二区三区 | 视频在线一区二区 | 91玖玖 | 国产中文字幕一区二区三区 | 亚洲自拍在线观看 | 中文精品在线 | 黑人巨大精品欧美黑白配亚洲 | 久久综合九九 | 午夜精品视频在线观看 | 成人免费视频视频 | 日韩电影免费在线观看中文字幕 | 精品久久久久久久久福利 | 日本美女一区二区三区 | 一区二区三区不卡视频 | 91久久精品日日躁夜夜躁国产 | 日韩欧美在线中文字幕 | 人人射人人草 | 国产精品天天干 | 九九在线视频 | 欧美视频在线一区 | 天天夜夜操| 国产精品久久久久久久久久三级 | 国产伦精品一区二区 | av中文字幕在线 | 中文字幕_第2页_高清免费在线 | 欧州一区二区三区 | 欧美成人精品一区二区男人看 | 午夜免费视频网站 | www.久久精品 | 精品伊人 | 日韩欧美精品一区 | 欧美精品在线一区二区三区 | 免费高潮视频95在线观看网站 | 欧美一级三级 | 欧美精品免费在线 | 精品中文字幕在线 | 精品1区| 国产综合av| 亚洲一区中文字幕永久在线 | 伊人久久视频 | 精品亚洲一区二区三区 | 日韩欧美手机在线 | 色在线免费视频 | 欧美激情亚洲 | 日韩高清中文字幕 | 国产在线一区不卡 | 成年人精品视频在线观看 | 九九re热| 国产精品18hdxxxⅹ在线 | 久久久精品免费观看 | 亚洲视频在线观看视频 | 欧美一级片免费观看 | 国产91av视频在线观看 | 99热福利| 欧美在线视频一区二区 | 国产精品久久久久久久久免费桃花 | 91中文字幕 | 日韩婷婷 | 欧美日韩美女 | h视频网站在线 | 欧美日韩亚洲成人 | 日韩中文字幕无码一区二区三区 | 国产一区二区三区免费观看 | 97久久精品人人做人人爽50路 | 国产精品久久久久无码av | 一区二区三区四区免费看 | 精品国产欧美一区二区三区不卡 | 国产成人精品免高潮在线观看 | 欧美一区二区免费在线 | 精品毛片 | 国产a级大片 | 欧美日韩不卡合集视频 | 亚洲高清www | 国产乱码一区二区三区在线观看 | 国产成人高清 | 超碰人人爱 | 九九免费观看全部免费视频 | 久久免费小视频 | 久草电影网 | 天天插天天操天天干 | 欧美激情一区二区三区在线观看 | 亚洲国产视频网站 | 欧美午夜精品久久久久久蜜 | 国产一级大片 | 国产一区视频在线 | 久久久精品久久久久久 | 久久久久久久av | 精品久久国产老人久久综合 | 嫩草视频免费在线观看 | 色噜噜狠狠狠综合曰曰曰88av | 99精品国产高清一区二区麻豆 | 一级毛片免费播放 | 精品国产乱码久久久久久久软件 | 日韩一区二区影视 | 成人黄色在线视频 | 成人福利在线 | 日韩精品久久久久久 | 国产美女自拍视频 | www.久久.com | 不卡免费在线视频 | 97超碰免费| 亚洲精品久久久久国产 | 成人在线不卡 | 四虎影院在线免费播放 | 中文字幕在线视频一区 | 91久久国产综合久久91精品网站 | 国产欧美日本 | 免费成人在线视频网站 | 日视频 | 欧美精品在线观看 | 做a视频在线观看 | 国产精品一二 | 久久999 | 久久久久一区二区三区 | 91久久久www播放日本观看 | 欧美一级在线观看视频 | 久久一区二区三区四区 | 一级二级在线观看 | 91精品麻豆日日躁夜夜躁 | 亚洲丶国产丶欧美一区二区三区 | 国产精品一区在线观看 | 日韩不卡一区二区三区 | 亚洲欧洲日韩在线 | 美女久久久 | 在线看片网站 | 亚洲精品视频在线观看免费视频 | 精品无码三级在线观看视频 | 亚洲国产精品区 | 成人亚洲一区 | 99视频在线 | 国产成人精品综合 | 国产一区二区久久 | 日韩在线小视频 | 久久久久久久91 | 欧美狠狠操 | 久久91精品 | 性做久久久久久久免费看 | 伊人一区 | 91麻豆精品国产91久久久资源速度 | 午夜精品久久久久久久久久久久 | 久久99深爱久久99精品 | 日韩aaa视频| 99热在线免费观看 | 午夜免费电影 | 欧美在线一区二区三区 | 国产小视频在线观看 | jizz久久久| 国产精品久久久久久久久久久久久 | 韩国精品视频在线观看 | 国产美女在线观看 | 日韩精品在线视频观看 | 日韩欧美国产成人一区二区 | 久草在线观看福利视频 | 国产精品女人视频 | 日本中文字幕在线播放 | 91免费视频 | www.久久 | 久久久国产精品视频 | 中文字幕乱码亚洲精品一区 | 黄色毛片在线观看 | 日韩一区二区在线观看 | 国产一区二区三区在线 | 三级欧美在线观看 | 水卜樱一区二区av | 日本韩国欧美一区 | 韩日av在线| 日夜夜精品视频 | 日本激情视频在线播放 | 欧美激情网址 | 91久久国产综合久久91精品网站 | 国产精品国产三级国产aⅴ9色 | 国产 欧美 日韩 一区 | 久久97视频 | 国产一级毛片国语一级 | 成人性视频在线播放 | 午夜在线电影 | 国产精品久久久久久久免费大片 | 国产精品视频yy9299一区 | 精品乱子伦一区二区三区 | 久久夜夜 | 成人免费在线观看网址 | 国产精品久久久久久久久久久杏吧 | 精品国产鲁一鲁一区二区三区 | 国产精品久久久久久久一区探花 | 国产在线激情视频 | 久热精品视频 | 国产一级一级特黄女人精品毛片 | 久草精品视频在线播放 | 国产激情视频在线 | 福利视频二区 | 国产精品99久久久久久久vr | 亚洲第一福利视频 | 人人种亚洲 | 精品无人乱码一区二区三区 | 国产精品视频久久久 | 精品伊人久久 | 偷偷干夜夜拍 | 一区免费看 | 亚洲午夜精品在线观看 | 久久99国产伦子精品免费 | 国产成人午夜 | 久久久久亚洲一区二区三区 | 2019天天操 | 日韩在线视频网站 | caoporn免费在线视频 | 中文字幕一区在线观看视频 | 精品视频二区三区 | 久久久久久一区 | 国产77777 | 天天色av | 久久视频一区 | 青草青草久热精品视频在线观看 | 91亚洲狠狠婷婷综合久久久 | 久久久久久久国产精品 | 国产黄色大片 | 欧美色综合一区二区三区 | 亚洲免费在线播放 | 在线观看国产精品一区二区 | 精品欧美乱码久久久久久1区2区 | 成人精品一区二区三区中文字幕 | 成人av在线播放 | 欧美大成色www永久网站婷 | 草樱av | 国产精品一区二区三区四区五区 | 欧美在线综合视频 | 国产一区二区毛片 | 国产真实乱全部视频 | 亚洲欧美精选 | 国产激情在线视频 | 韩国成人精品a∨在线观看 国产伊人av | 五月免费视频 | 欧美精品乱码久久久久久按摩 | 亚洲综合大片69999 | 国产精品美女久久久久久免费 | 亚洲色图p| 一级片观看 | 免费一二二区视频 | 成人片网址 | 女人久久久 | 凹凸日日摸日日碰夜夜 | 日本精品视频 | 国产精品99久久久久久宅男 | 久久久久99精品国产片 | 欧美激情视频一区二区三区在线播放 | 黄色一级免费观看 | 国产成人精品久久 | 中文字幕在线一区二区三区 | 中文字幕在线一区二区三区 | 欧美自拍一区 | 久久99久 | 男女网站视频 | 国内久久精品视频 | 99精品国产高清一区二区麻豆 | h免费观看 | 91aiai| 视频在线91| 精品成人在线 | 午夜不卡视频 | 亚洲精品一二三四五区 | 国产一级视频在线播放 | 精品一区二区三区免费毛片爱 | 亚洲欧洲一区二区三区 | 亚洲综合视频 | 日韩免费高清在线 | 国产婷婷久久 | 国产一区二区三区在线看 | 在线你懂得| 亚洲www啪成人一区二区 | 精品一区久久 | 亚洲精品电影在线一区 | 看亚洲a级一级毛片 | 精品自拍视频 | 岛国免费| 中文字幕在线导航 | 国产69精品99久久久久久宅男 | 欧美日韩一区二区中文字幕 | 日韩欧美一区二区三区久久婷婷 | 久久99精品久久久久久琪琪 | 龙珠z中文版普通话 | 在线观看中文字幕 | 久久精品一区二区三区四区 | 综合久久综合久久 | 日韩小视频在线播放 | 国产一区二区三区久久久 | 久久一道本 | 亚洲乱码国产乱码精品精98午夜 | 日本久久艹| 日韩一区二区三区在线视频 | 99久久精品国产毛片 | 香蕉视频91 | 人一级毛片 | 国产精品久久久久久久午夜片 | 视频一区二区中文字幕日韩 | 中国特级毛片 |