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

拒絕寫(xiě)重復(fù)代碼,試試這套開(kāi)源的 SpringBoot 組件,效率翻倍

開(kāi)發(fā)
目前,業(yè)界使用Spring Boot進(jìn)行接口開(kāi)發(fā)時(shí),往往存在效率底下、重復(fù)勞動(dòng)、可讀性差等問(wèn)題,我們可以通過(guò)Graceful Response這個(gè)組件解決這樣的問(wèn)題。

一、簡(jiǎn)介

Graceful Response是一個(gè)Spring Boot技術(shù)棧下的優(yōu)雅響應(yīng)處理器,提供一站式統(tǒng)一返回值封裝、全局異常處理、自定義異常錯(cuò)誤碼等功能,使用Graceful Response進(jìn)行web接口開(kāi)發(fā)不僅可以節(jié)省大量的時(shí)間,還可以提高代碼質(zhì)量,使代碼邏輯更清晰。

強(qiáng)烈推薦你花3分鐘學(xué)會(huì)它!

本項(xiàng)目案例工程代碼:https://github.com/feiniaojin/graceful-response-example.git ,注意選擇最新版本的分支。

Spring Boot版本

Graceful Response版本

graceful-response-example分支

2.x

3.2.1-boot2

3.2.0-boot2

3.x

3.2.1-boot3

3.2.0-boot3

注意,3.2.1-boot2版本的GracefulResponse源碼由單獨(dú)的倉(cāng)庫(kù)進(jìn)行維護(hù),地址為:https://github.com/feiniaojin/graceful-response-boot2。

3.2.1-boot2和3.2.1-boot3除了支持的SpringBoot版本不一樣,其他實(shí)現(xiàn)完全一致,Maven引用時(shí)只需要根據(jù)對(duì)應(yīng)的SpringBoot版本選擇Graceful Response的version即可,兩者的groupId、artifactId是一致的。

二、快速入門(mén)

1.Spring Boot接口開(kāi)發(fā)現(xiàn)狀

目前,業(yè)界使用Spring Boot進(jìn)行接口開(kāi)發(fā)時(shí),往往存在效率底下、重復(fù)勞動(dòng)、可讀性差等問(wèn)題。以下偽代碼相信大家非常熟悉,我們大部分項(xiàng)目的Controller接口都是這樣的。

@Controller
public class Controller {

    @GetMapping("/query")
    @ResponseBody
    public Response query(Map<String, Object> paramMap) {
        Response res = new Response();
        try {
            //1.校驗(yàn)params參數(shù)合法性,包括非空校驗(yàn)、長(zhǎng)度校驗(yàn)等
            if (illegal(paramMap)) {
                res.setCode(1);
                res.setMsg("error");
                return res;
            }
            //2.調(diào)用Service的一系列操作,得到查詢結(jié)果
            Object data = service.query(params);
            //3.將操作結(jié)果設(shè)置到res對(duì)象中
            res.setData(data);
            res.setCode(0);
            res.setMsg("ok");
            return res;
        } catch (Exception e) {
            //4.異常處理:一堆丑陋的try...catch,如果有錯(cuò)誤碼的,還需要手工填充錯(cuò)誤碼
            res.setCode(1);
            res.setMsg("error");
            return res;
        }
    }
}

這段偽代碼存在什么樣的問(wèn)題呢?

第一個(gè)問(wèn)題,效率低下。 Controller層的代碼應(yīng)該盡量簡(jiǎn)潔,上面的偽代碼其實(shí)只是為了將數(shù)據(jù)查詢的結(jié)果進(jìn)行封裝,使其以統(tǒng)一的格式進(jìn)行返回。例如以下格式的響應(yīng)體:

{
  "code": 0,
  "msg": "ok",
  "data": {
    "id": 1,
    "name": "username"
  }
}

查詢過(guò)程中如果發(fā)生異常,需要在Controller進(jìn)行手工捕獲,根據(jù)捕獲的異常人工地設(shè)置錯(cuò)誤碼,當(dāng)然,也用同樣的格式封裝錯(cuò)誤碼進(jìn)行返回。

可以看到,除了調(diào)用service層的query方法這一行,其他大部分的代碼都執(zhí)行進(jìn)行結(jié)果的封裝,大量的冗余、低價(jià)值的代碼導(dǎo)致我們的開(kāi)發(fā)活動(dòng)效率很低。

第二個(gè)問(wèn)題,重復(fù)勞動(dòng)。 以上捕獲異常、封裝執(zhí)行結(jié)果的操作,每個(gè)接口都會(huì)進(jìn)行一次,因此造成大量重復(fù)勞動(dòng)。

第三個(gè)問(wèn)題,可讀性低。 上面的核心代碼被淹沒(méi)在許多冗余代碼中,很難閱讀,如同大海撈針。

我們可以通過(guò)Graceful Response這個(gè)組件解決這樣的問(wèn)題。

2. 快速入門(mén)

(1) 引入Graceful Response組件

Graceful Response已發(fā)布至maven中央倉(cāng)庫(kù),我們可以直接引入到項(xiàng)目中。

maven依賴(lài)如下:

<dependency>
    <groupId>com.feiniaojin</groupId>
    <artifactId>graceful-response</artifactId>
    <version>{latest.version}</version>
</dependency>

Spring Boot版本

Graceful Response最新版本

2.x

3.2.1-boot2

3.x

3.2.1-boot3

(2) 啟用Graceful Response

在啟動(dòng)類(lèi)中引入@EnableGracefulResponse注解,即可啟用Graceful Response組件。

@EnableGracefulResponse
@SpringBootApplication
public class ExampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ExampleApplication.class, args);
    }
}

(3) Controller層

引入Graceful Response后,我們不需要再手工進(jìn)行查詢結(jié)果的封裝,直接返回實(shí)際結(jié)果即可,Graceful Response會(huì)自動(dòng)完成封裝的操作。

Controller層示例如下:

@Controller
public class Controller {
    @RequestMapping("/get")
    @ResponseBody
    public UserInfoView get(Long id) {
        log.info("id={}", id);
        return UserInfoView.builder().id(id).name("name" + id).build();
    }
}

在示例代碼中,Controller層的方法直接返回了UserInfoView對(duì)象,沒(méi)有進(jìn)行封裝的操作,但經(jīng)過(guò)Graceful Response處理后,我們還是得到了以下的響應(yīng)結(jié)果。

{
  "status": {
    "code": "0",
    "msg": "ok"
  },
  "payload": {
    "id": 1,
    "name": "name1"
  }
}

而對(duì)于命令操作(Command)盡量不返回?cái)?shù)據(jù),因此command操作的方法的返回值應(yīng)該是void,Graceful Response對(duì)于對(duì)于返回值類(lèi)型void的方法,也會(huì)自動(dòng)進(jìn)行封裝。

public class Controller {
    @RequestMapping("/command")
    @ResponseBody
    public void command() {
        //業(yè)務(wù)操作
    }
}

成功調(diào)用該接口,將得到:

{
  "status": {
    "code": "200",
    "msg": "success"
  },
  "payload": {}
}

(3) Service層

在引入Graceful Response前,有的開(kāi)發(fā)者在定義Service層的方法時(shí),為了在接口中返回異常碼,干脆直接將Service層方法定義為Response,淹沒(méi)了方法的正常返回值。

Response的代碼如下。

//lombok注解
@Data
public class Response {
    private String code;
    private String msg;
    private Object data;
}

直接返回Response的Service層方法:

/**
 * 直接返回Reponse的Service
 * 不規(guī)范
 */
public interface Service {
    public Reponse commandMethod(Command command);
}

Graceful Response引入@ExceptionMapper注解,通過(guò)該注解將異常和錯(cuò)誤碼關(guān)聯(lián)起來(lái),這樣Service方法就不需要再維護(hù)Response的響應(yīng)碼了,直接拋出業(yè)務(wù)異常,由Graceful Response進(jìn)行異常和響應(yīng)碼的關(guān)聯(lián)。搜索我是程序汪公眾號(hào),回復(fù)“面試寶典”,送你一份Java面試寶典

@ExceptionMapper的用法如下。

/**
 * NotFoundException的定義,使用@ExceptionMapper注解修飾
 * code:代表接口的異常碼
 * msg:代表接口的異常提示
 */
@ExceptionMapper(code = "1404", msg = "找不到對(duì)象")
public class NotFoundException extends RuntimeException {

}

Service接口定義:

public interface QueryService {
    UserInfoView queryOne(Query query);
}

Service接口實(shí)現(xiàn):

public class QueryServiceImpl implements QueryService {
    @Resource
    private UserInfoMapper mapper;

    public UserInfoView queryOne(Query query) {
        UserInfo userInfo = mapper.findOne(query.getId());
        if (Objects.isNull(userInfo)) {
            //這里直接拋?zhàn)远x異常
            throw new NotFoundException();
        }
        //……后續(xù)業(yè)務(wù)操作
    }
}

當(dāng)Service層的queryOne方法拋出NotFoundException時(shí),Graceful Response會(huì)進(jìn)行異常捕獲,并將NotFoundException對(duì)應(yīng)的異常碼和異常信息封裝到統(tǒng)一的響應(yīng)對(duì)象中,最終接口返回以下JSON。

{
  "status": {
    "code": "1404",
    "msg": "找不到對(duì)象"
  },
  "payload": {}
}

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

Graceful Response對(duì)JSR-303數(shù)據(jù)校驗(yàn)規(guī)范和Hibernate Validator進(jìn)行了增強(qiáng),Graceful Response自身不提供參數(shù)校驗(yàn)的功能,但是用戶使用了Hibernate Validator后,Graceful Response可以通過(guò)@ValidationStatusCode注解為參數(shù)校驗(yàn)結(jié)果提供響應(yīng)碼,并將其統(tǒng)一封裝返回。

例如以下的UserInfoQuery:

@Data
public class UserInfoQuery {
    @NotNull(message = "userName is null !")
    @Length(min = 6, max = 12)
    @ValidationStatusCode(code = "520")
    private String userName;
}
  • UserInfoQuery對(duì)象中定義了@NotNull和@Length兩個(gè)校驗(yàn)規(guī)則,在未引入Graceful Response的情況下,會(huì)直接拋出異常;
  • 在引入Graceful Response但是沒(méi)有加入@ValidationStatusCode注解的情況下,會(huì)以默認(rèn)的錯(cuò)誤碼進(jìn)行返回;

在上面的UserInfoQuery中由于使用了@ValidationStatusCode注解,并指定異常碼為520,則當(dāng)userName字段任意校驗(yàn)不通過(guò)時(shí),都會(huì)使用異常碼520進(jìn)行返回,如下:

{
  "status": {
    "code": "520",
    "msg": "userName is null !"
  },
  "payload": {}
}

而對(duì)于Controller層直接校驗(yàn)方法入?yún)⒌膱?chǎng)景,Graceful Response也進(jìn)行了增強(qiáng),如以下Controller:

public class Controller {

    @RequestMapping("/validateMethodParam")
    @ResponseBody
    @ValidationStatusCode(code = "1314")
    public void validateMethodParam(
            @NotNull(message = "userId不能為空") Long userId,
            @NotNull(message = "userName不能為空") Long userName) {
        //省略業(yè)務(wù)邏輯
    }
}

如果該方法入?yún)⑿r?yàn)觸發(fā)了userId和userName的校驗(yàn)異常,將以錯(cuò)誤碼1314進(jìn)行返回,如下:

{
  "status": {
    "code": "1314",
    "msg": "userId不能為空"
  },
  "payload": {}
}

(6) 自定義Response格式

Graceful Response內(nèi)置了兩種風(fēng)格的響應(yīng)格式,并通過(guò)graceful-response.response-style進(jìn)行配置。

graceful-response.response-style=0,或者不配置(默認(rèn)情況),將以以下的格式進(jìn)行返回:

{
  "status": {
    "code": 1007,
    "msg": "有內(nèi)鬼,終止交易"
  },
  "payload": {
  }
}

graceful-response.response-style=1,將以以下的格式進(jìn)行返回:

{
  "code": "1404",
  "msg": "not found",
  "data": {
  }
}

如果這兩種格式均不滿足業(yè)務(wù)需要,Graceful Response也支持用戶自定義響應(yīng)體,關(guān)于自定義響應(yīng)體的技術(shù)實(shí)現(xiàn),請(qǐng)到自定義Response格式進(jìn)行了解。

本項(xiàng)目提供的進(jìn)階功能,包括:

  • 第三方組件汽車(chē)(Swagger、執(zhí)行器等)
  • 自定義響應(yīng)
  • 異常請(qǐng)求放行
  • 異常別名
  • 常用配置項(xiàng)

目前該組件在GitHub上已經(jīng)有兩百多Star,很多朋友已經(jīng)開(kāi)始用了,大家可以通過(guò)下方鏈接了解下:https://github.com/feiniaojin/graceful-response。

責(zé)任編輯:趙寧寧 來(lái)源: 技術(shù)老男孩
相關(guān)推薦

2025-10-31 04:11:00

2025-06-30 02:44:00

SpringBoot開(kāi)發(fā)優(yōu)化

2024-09-06 08:02:52

2025-04-18 04:22:00

2023-12-26 15:14:00

2021-05-31 18:56:56

代碼編碼開(kāi)發(fā)

2020-08-05 07:50:40

開(kāi)發(fā)編輯器技術(shù)

2025-08-29 10:00:00

JavaScript瀏覽器API

2020-12-13 17:54:36

開(kāi)發(fā)人員

2023-08-01 10:31:03

工具平臺(tái)插件化

2023-04-27 13:16:45

2024-12-20 12:30:00

Python'|'代碼

2021-01-27 11:36:34

代碼開(kāi)發(fā)工具

2023-09-12 23:15:08

Shell腳本

2024-03-08 09:35:25

2025-09-05 00:00:00

前端開(kāi)發(fā)AI

2023-11-23 19:36:58

2024-04-10 14:08:00

人工智能開(kāi)發(fā)工具

2020-12-04 07:49:54

AICtrl C代碼

2023-09-25 10:02:00

GitVS Code
點(diǎn)贊
收藏

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

日韩中文在线中文网三级| 欧美美女bb生活片| 欧美凹凸一区二区三区视频| 中国女人真人一级毛片| 中文不卡在线| 亚洲欧美激情视频| 久久精品国产露脸对白| 偷拍自拍在线看| 国产精品久久久久影院色老大| 成人在线观看91| 怡春院在线视频| 亚洲清纯自拍| 欧美成人午夜剧场免费观看| 一级性生活毛片| 麻豆精品在线| 欧美亚洲动漫精品| 免费一级特黄特色毛片久久看| 成年人在线观看| a在线欧美一区| 91手机视频在线观看| youjizz在线视频| 欧美在线黄色| 久久久精品久久久久| www.狠狠爱| 激情小说一区| 日韩一区二区三区电影在线观看 | 九九热久久66| www.色婷婷.com| 久久国产人妖系列| 国产精品久久久久久久久久久久久 | 黄色视屏网站在线免费观看| 成人精品一区二区三区中文字幕| 成人免费视频在线观看超级碰| 在线观看 亚洲| 99精品视频免费| 午夜精品视频在线| 毛片a片免费观看| 91精品秘密在线观看| 中文字幕免费国产精品| 国产精品1000部啪视频| 久久久久久久久久久久久久久久久久久久| 欧美精品aⅴ在线视频| 蜜桃免费在线视频| 最新欧美电影| 91电影在线观看| 99精品免费在线观看| 自由日本语热亚洲人| 欧美午夜美女看片| 男人揉女人奶房视频60分 | av资源网在线观看| 欧美国产一区二区在线观看| 日韩欧美精品一区二区三区经典| 欧美日韩国产综合视频| 久久久久久影视| 欧美一区二区三区精美影视| 麻豆app在线观看| 久久精品人人做| 日韩视频专区| 米奇777四色精品人人爽| 亚洲免费观看高清| 美女av免费观看| 77thz桃花论族在线观看| 亚州成人在线电影| 美女av免费在线观看| 日韩新的三级电影| 欧美日韩免费视频| 91蝌蚪视频在线| 91成人在线精品视频| 日韩二区三区在线| 国产黄色大片免费看| 999国产精品永久免费视频app| 久久激情视频免费观看| 免费看一级一片| 国产日韩免费| 国产日韩精品一区二区| 国产伦精品一区二区三区视频痴汉 | 国产成人福利视频| 91亚洲精品国偷拍自产在线观看| 国产在线精品一区二区夜色| 国产精品伊人日日| 久久精品a一级国产免视看成人 | 久青草视频在线观看| 夜夜夜久久久| 国产欧美日韩综合精品| 成人av无码一区二区三区| 91色.com| 热这里只有精品| 一区二区乱码| 91精品国产福利| 一二三不卡视频| 999国产精品视频| 97视频国产在线| 夜夜爽8888| 91美女片黄在线观看91美女| 一区精品视频| 第一福利在线视频| 6080午夜不卡| 爱爱免费小视频| 亚洲精品电影| 国产精品爱啪在线线免费观看| www.av在线.com| 国产亲近乱来精品视频| 蜜臀av色欲a片无码精品一区| 草民电影神马电影一区二区| 亚洲第一色在线| 亚洲一二三四五六区| 中文精品在线| 亚洲一区二区三区香蕉| www.亚洲.com| 日韩欧亚中文在线| 欧美午夜精品一区二区| 日韩中文首页| 日韩av片免费在线观看| 欧美 日韩 综合| 亚洲欧洲三级电影| www.99av.com| 夜夜春成人影院| 韩国19禁主播vip福利视频| 亚洲视频在线观看免费视频| 久久久www成人免费无遮挡大片| 日韩一级片一区二区| 性欧美video另类hd尤物| 一本色道久久综合狠狠躁篇怎么玩| 欧美国产日韩综合| 国产一区二区电影| 在线国产99| 四虎精品一区二区免费| 国产亚洲视频中文字幕视频| 亚洲欧美偷拍视频| 26uuu色噜噜精品一区二区| 日韩视频免费播放| 精品一区二区三区亚洲| 最近中文字幕日韩精品| 无码久久精品国产亚洲av影片| 91香蕉视频在线| 免费无码不卡视频在线观看| 九九热这里有精品| 国产亚洲精品久久久久久777| 一级片免费在线播放| 91亚洲永久精品| 欧美s码亚洲码精品m码| 日韩美女精品| 欧美壮男野外gaytube| 欧美日韩在线中文字幕| 欧美日韩在线观看视频| 亚洲成人网在线播放| 性欧美xxxx大乳国产app| 久久精品综合一区| 欧美三级网址| 这里只有精品视频在线| 夜夜躁很很躁日日躁麻豆| 亚洲欧洲在线观看av| 午夜影院免费版| 韩日在线一区| 国产精品一区二| 欧美gv在线| 亚洲视频在线观看免费| 少妇人妻偷人精品一区二区| 澳门成人av网| 亚洲精品成人av| 中日韩黄色大片| 91在线免费播放| 99久久激情视频| 经典一区二区| 国产精品视频公开费视频| 中文字幕日本在线观看| 6080yy午夜一二三区久久| 538任你躁在线精品视频网站| 国产精品456| 日韩欧美国产综合在线| 小说区图片区色综合区| 国产精品毛片a∨一区二区三区|国 | sm在线观看| 亚洲理论在线a中文字幕| 中文字幕欧美在线观看| 一区二区三区在线免费视频| 麻豆国产精品一区| 麻豆传媒一区二区三区| 蜜臀精品一区二区| 国产精品欧美在线观看| 成人国产精品色哟哟| a级片在线免费观看| 亚洲人成网在线播放| 国产日韩欧美一区二区东京热| 亚洲高清中文字幕| 神马久久久久久久久久久| 国产精品一区免费在线观看| 亚洲 高清 成人 动漫| 久久综合88| 久久波多野结衣| 亚洲精品aaa| 欧美亚洲日本网站| 在线中文字幕第一页| 亚洲欧美日韩精品久久| 国产av一区二区三区精品| 色综合久久综合网97色综合 | 你懂的免费在线观看视频网站| 欧美日韩国产美| 美日韩一二三区| 亚洲激情中文1区| 一级片黄色录像| 91麻豆免费看片| 极品人妻一区二区| 琪琪一区二区三区| 99爱视频在线| 午夜亚洲福利| 亚洲欧洲免费无码| 青青一区二区| 国产精华一区二区三区| 日韩制服一区| 欧美又大又粗又长| 国产亚av手机在线观看| www.欧美三级电影.com| 你懂的视频在线免费| 日韩精品中文字幕在线一区| 中文字幕人妻一区二区在线视频| 天天综合色天天| 欧美精品乱码视频一二专区| 国产精品拍天天在线| 五级黄高潮片90分钟视频| 成人夜色视频网站在线观看| 午夜大片在线观看| 欧美aaaaaa午夜精品| 欧洲av无码放荡人妇网站| 亚洲二区视频| 99国产精品白浆在线观看免费| 天天综合网网欲色| 亚洲精品一区国产精品| 欧洲激情综合| 日本一区二区三区四区高清视频| 国产欧美三级电影| 成人欧美一区二区三区黑人免费| 亚洲欧洲一二区| 成人免费自拍视频| 91精品国产自产观看在线| 国产美女久久精品香蕉69| 日韩中文在线播放| 国产精品成人国产乱一区| xxxxxx欧美| 国产精品18久久久久久麻辣| 欧美一级大黄| 国产不卡视频在线| 成人免费在线观看视频| 国产精品成久久久久三级| 成人免费av电影| 国产精品美女av| 青青草国产一区二区三区| 国产日韩欧美视频| www欧美在线观看| 1卡2卡3卡精品视频| 一区二区在线视频观看| 成人自拍视频网站| 偷拍精品福利视频导航| 欧美一区观看| 日韩国产欧美一区二区| 性做爰过程免费播放| 欧美视频亚洲视频| 欧美大片在线播放| 久久亚洲精品伦理| 狠狠躁狠狠躁视频专区| 国产综合色视频| 五月天丁香社区| 91女神在线视频| 亚洲毛片亚洲毛片亚洲毛片| 亚洲欧美成aⅴ人在线观看| 久草免费新视频| 欧美视频13p| 亚洲一级特黄毛片| 日韩午夜激情视频| 午夜影院在线视频| 亚洲人亚洲人色久| 亚洲最大福利视频网| 无码人妻丰满熟妇区五十路百度| 天堂精品中文字幕在线| 超碰人人草人人| zzijzzij亚洲日本少妇熟睡| 久久婷婷五月综合| 亚洲精品一卡二卡| 五月婷婷视频在线| 欧美日韩国产在线观看| 亚洲精品一区二区三区四区| 亚洲人成网站在线播| 91高清在线观看视频| 88xx成人精品| 99精品美女视频在线观看热舞| 国产精品日韩欧美一区二区| 日本a级不卡| 国产精品专区在线| 国内成+人亚洲+欧美+综合在线| 午夜剧场免费看| 国产精品久久久久影院老司| 日韩黄色三级视频| 欧美日韩久久一区二区| 手机看片国产1024| 久久精品亚洲一区| 亚洲校园激情春色| 国产经品一区二区| 国产国产精品| 国产一级不卡毛片| 成人免费观看av| 91香蕉一区二区三区在线观看| 精品日本高清在线播放 | 青青在线视频| 国产精品日韩专区| 婷婷精品在线| 奇米777四色影视在线看| 日本亚洲欧美天堂免费| 国产艳俗歌舞表演hd| 亚洲一区二区三区四区在线观看 | 超碰国产一区| 国产伦精品一区二区三区四区视频 | 日韩avxxx| 懂色中文一区二区在线播放| 日韩av片在线免费观看| 91激情五月电影| 五月天婷婷视频| 久久久久久国产精品三级玉女聊斋 | 91情侣在线视频| 97色伦图片97综合影院| 狠狠操精品视频| 久久亚洲影视婷婷| 精品成人久久久| 精品国精品国产| 性网站在线观看| 亚洲一区二区三区香蕉| 羞羞色午夜精品一区二区三区| 天天爽人人爽夜夜爽| 国产亚洲成av人在线观看导航 | 欧美日韩在线一区二区三区| 亚洲二区免费| 屁屁影院国产第一页| 亚洲国产精品久久艾草纯爱| 性色av蜜臀av| 欧美巨猛xxxx猛交黑人97人| 久久wwww| 青青草综合视频| 国产成人精品免费网站| 九九视频免费看| 精品久久国产老人久久综合| 超黄网站在线观看| 国产一区二区无遮挡| 亚洲精品乱码| jizz欧美性20| 在线亚洲一区观看| 国产九色在线| 国产在线视频2019最新视频| 国产精品国产三级国产在线观看| 亚洲一级免费在线观看| 综合久久综合久久| 精品久久久中文字幕人妻| 欧美极品美女视频网站在线观看免费| 伊色综合久久之综合久久| 欧美激情视频免费看| 91亚洲大成网污www| 性色av免费观看| 日韩中文理论片| 麻豆国产精品| 国产精品333| 久久久亚洲精品一区二区三区| 久久久999久久久| 久久精品男人天堂| a级日韩大片| 欧美成人黑人猛交| 亚洲少妇30p| 成人乱码一区二区三区| 热99久久精品| 欧美gay男男猛男无套| 日本成人在线免费| 一本到不卡精品视频在线观看| gogogo高清在线观看免费完整版| 成人免费视频网址| 日韩午夜免费| 国精产品一区一区| 亚洲电影在线看| 99re久久| 亚洲精品蜜桃久久久久久| 国产欧美一区二区精品秋霞影院| 国产农村老头老太视频| 992tv成人免费视频| 久久亚洲影视| 黄色av网址在线观看| 欧美日韩免费一区二区三区| av老司机免费在线| 神马影院午夜我不卡| 国产高清无密码一区二区三区| 免费的毛片视频| 色综合老司机第九色激情| 国产亚洲一区二区三区啪| 香蕉视频xxxx| 欧美亚洲丝袜传媒另类| 欧美高清另类hdvideosexjaⅴ| 日本一区免费| 高清成人在线观看| 中文字幕+乱码+中文| 色综合婷婷久久| 一区二区久久精品66国产精品| 色综合色综合网色综合| 欧州一区二区| 波多野结衣加勒比| 91.成人天堂一区|