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

Jackson注解的用法和場景,不看巨虧

開發 前端
@JacksonAnnotationsInside這個注解用來標記Jackson復合注解,當你使用多個Jackson注解組合成一個自定義注解時會用到它。

[[411385]]

Jackson注解一覽

今天總結一下Jackson的一系列注解的用法和場景,或許能幫助你實現一些功能,總結不易,還請多多關注、點贊、轉發。

@JacksonAnnotation

這個注解經常用于Jackson自定義注解中,用來標記這是一個Jackson注解,這個胖哥在Jackson脫敏一文中用過它來實現自定義的序列化注解。

@JacksonAnnotationsInside

這個注解用來標記Jackson復合注解,當你使用多個Jackson注解組合成一個自定義注解時會用到它。

  1. /** 
  2.  * 非空以及忽略未知屬性 
  3.  **/ 
  4. @Retention(RetentionPolicy.RUNTIME) 
  5. @JacksonAnnotationsInside 
  6. @JsonInclude(Include.NON_NULL) 
  7. @JsonIgnoreProperties(ignoreUnknown = true
  8. public @interface NotNullAndIgnoreAnnotation {} 

@JacksonInject

json屬性值將在反序列化時可以被注入,我們先在屬性上標記:

  1. @Data 
  2. public final class JacksonInjectUser { 
  3.     @JacksonInject(value = "dynamic"
  4.     private String name
  5.     private Integer age; 

然后name的值就可以在反序列化的時候動態化,不再需要去解析、拼字段。

  1. @SneakyThrows 
  2. @Test 
  3. void jacksonInject() { 
  4.     // 這個值動態化了 
  5.     String dynamicValue = "some Dynamic value"
  6.     InjectableValues.Std injectableValues = new InjectableValues.Std() 
  7.             // 名稱和注解中聲明的相同才行 
  8.             .addValue("dynamic", dynamicValue); 
  9.     JacksonInjectUser jacksonInjectUser = objectMapper.setInjectableValues(injectableValues) 
  10.             // 空json 最后居然可以賦值 
  11.             .readValue("{}", JacksonInjectUser.class); 
  12.     Assertions.assertEquals(dynamicValue,jacksonInjectUser.getName()); 

注意:@JacksonInject中提供了useInput參數進行綁定策略控制。

@JsonAlias

在反序列化的時候來對Java Bean的屬性進行名稱綁定,可以綁定多個json的鍵名。舉個例子:

  1.     @SneakyThrows 
  2.     @Test 
  3.     void jsonAlias(){ 
  4.         // 兩個json的類型結構是相同的 可以定義一個Bean來接收 
  5.         String userJson = "{\"name\": \"felord.cn\",\"age\": 22}"
  6.         String itemJson = "{\"category\": \"coco\", \"count\": 50 }"
  7.         Domain user = objectMapper.readValue(userJson, Domain.class); 
  8.         Assertions.assertEquals("felord.cn",user.getStr()); 
  9.         Assertions.assertEquals(22,user.getNum()); 
  10.         Domain item = objectMapper.readValue(itemJson, Domain.class); 
  11.         Assertions.assertEquals("coco",item.getStr()); 
  12.         Assertions.assertEquals(50,item.getNum()); 
  13.     } 
  14.  
  15. @Data 
  16. public class Domain{ 
  17.     @JsonAlias({"name","category"}) 
  18.     private String str; 
  19.     @JsonAlias({"age","count"}) 
  20.     private Integer num; 

注意:只能用于json反序列化。

@JsonAnyGetter

在json序列化時可以將Bean中的java.util.Map類型的屬性“平鋪展開”,舉個例子:

某個Java Bean正常的json序列化結果是:

  1.   "name""felord.cn"
  2.   "age": 22, 
  3.   "unMatched": { 
  4.     "unknown""unknown" 
  5.   } 

但是我們需要:

  1.   "name""felord.cn"
  2.   "age": 22, 
  3.   "unknown""unknown" 

我們可以對Java Bean這么標記:

  1. @Data 
  2. public class MapUser { 
  3.     private String name
  4.     private Integer age; 
  5.     private Map<String,Object> unMatched; 
  6.  
  7.     @JsonAnyGetter 
  8.     public Map<String, Object> getUnMatched() { 
  9.         return unMatched; 
  10.     } 

然后我們來試一試:

  1. @SneakyThrows 
  2. @Test 
  3. void jsonAnyGetter(){ 
  4.     MapUser mapUser = new MapUser(); 
  5.  
  6.     mapUser.setName("felord.cn"); 
  7.     mapUser.setAge(22); 
  8.     mapUser.setUnMatched(Collections.singletonMap("unknown","unknown")); 
  9.  
  10.     String json = objectMapper.writeValueAsString(mapUser); 
  11.     // 獲取json中unknown節點的值 
  12.     Object read = JsonPath.parse(json) 
  13.             .read(JsonPath.compile("$.unknown")); 
  14.     Assertions.assertEquals("unknown",read); 

不過這個注解的使用也是有條件的:

  • 不能是靜態方法。
  • 必須是無參方法。
  • 方法的返回值必須是java.util.Map。
  • 一個實體中只能使用一個該注解。

@JsonAnySetter

正好和@JsonAnyGetter相反,這里就不介紹了。

@JsonAutoDetect

一般情況下,我們認為Jackson序列化對象的前提是有無參構造并且有Getter方法。事實上下面這個類依然可以序列化成json:

  1. @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY
  2. public class ConstructUser { 
  3.     private final String name
  4.     private final Integer age; 
  5.  
  6.     public ConstructUser(String nameInteger age) { 
  7.         this.name = name
  8.         this.age = age; 
  9.     } 

我們可以通過調整Java Bean中屬性、getter方法、isGetter方法、setter方法、初始化實例的方法。可見級別可以分為:

  • DEFAULT: 需要根據上下文來判斷,一般基于父類的可見性。
  • ANY:任何級別的都可以自動識別。
  • NONE:所有級別都不可以自動識別。
  • NON_PRIVATE:非private修飾的可以自動識別。
  • PROTECTED_AND_PUBLIC:被protected和public修飾的可以被自動識別。
  • PUBLIC_ONLY:只有被public修飾的才可以被自動識別。

@JsonBackReference

這個注解經常和另一個注解@JsonManagedReference成對出現,它為了解決遞歸的問題,例如兩個類互相持有對方:

  1. Info info = new Info(); 
  2. Player player = new Player(); 
  3. player.setId(1); 
  4. info.setPlayer(player); 
  5. player.setInfo(info); 
  6. // 直接無限遞歸了 
  7. String InfiniteRecursionError = objectMapper.writeValueAsString(player); 

json序列化的時候直接無限遞歸了。如果你想得到下面的序列化結果:

  1. // player 
  2. {"id":1,"info":{"id":0}} 

就需要在類Player的Info屬性上標記@JsonManagedReference,同時在Info類中的Player屬性上標記@JsonBackReference注解。

如果你想在序列化Player時直接忽略掉Info屬性,即期望得到{"id":1},只需要在Player的Info屬性上標記@JsonBackReference注解。

@JsonClassDescription

Jackson對json schemas的支持,用來生成整個json的描述信息。

@JsonCreator

Jackson在反序列化時默認會去找Java Bean的無參構造,但是有些Bean沒有無參構造,這時@JsonCreator就派上用場了。你可以將它標記在構造方法或靜態工廠方法上,通常它還需要同@JsonProperty或@JacksonInject配合,就像這樣:

  1. @Getter 
  2. public class DescriptionUser { 
  3.     private final String name
  4.     private final Integer age; 
  5.  
  6.     @JsonCreator 
  7.     public DescriptionUser(@JsonProperty("name") String name,  
  8.                            @JsonProperty("age"Integer age) { 
  9.         this.name = name
  10.         this.age = age; 
  11.     } 

對應的單元測試:

  1. @SneakyThrows 
  2. @Test 
  3. void jsonCreator() { 
  4.     String json = "{\"name\": \"felord.cn\",\"age\": 22}"
  5.     DescriptionUser user = objectMapper.readValue(json, DescriptionUser.class); 
  6.     Assertions.assertEquals("felord.cn"user.getName()); 

你可以在靜態初始化實例工廠方法上試試這個注解。

@JsonEnumDefaultValue

我們在定義性別枚舉時往往只定義了男和女兩個性別。你不能指望用戶守規矩。科學的方法是定義一個枚舉用來兜底。就像這樣:

  1. public enum Gender { 
  2.     /** 
  3.      * Female gender. 
  4.      */ 
  5.     FEMALE, 
  6.     /** 
  7.      * Male gender. 
  8.      */ 
  9.     MALE, 
  10.     /** 
  11.      * Unknown gender. 
  12.      */ 
  13.     UNKNOWN 
  14.    } 

當用戶亂填的時候都定義為未知。在jackson反序列化支持設置一個默認值來兜底。我們可以在Gender#UNKNOWN上標記@JsonEnumDefaultValue,然后反序列化:

  1. @SneakyThrows 
  2. @Test 
  3. void jsonEnumDefaultValue(){ 
  4.     // 開啟未知枚舉值使用默認值特性 
  5.     objectMapper.enable(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE); 
  6.     String maleJson = "{\"name\": \"felord.cn\",\"age\": 22,\"gender\":\"MALE\"}"
  7.  
  8.     EnumUser male = objectMapper.readValue(maleJson, EnumUser.class); 
  9.     Assertions.assertEquals(Gender.MALE,male.getGender()); 
  10.  
  11.     String unknownJson = "{\"name\": \"felord.cn\",\"age\": 22,\"gender\":\"notClear\"}"
  12.     EnumUser unknownGender = objectMapper.readValue(unknownJson, EnumUser.class); 
  13.     Assertions.assertEquals(Gender.UNKNOWN,unknownGender.getGender()); 

注意:必須手動jackson開啟未知枚舉值使用默認值特性。

@JsonFilter

同一個實體類根據不同的場景可能需要不同的序列化策略。比如對于A用戶實體的某些字段可見,對于B用戶另一些字段可見,實現動態的數據字段權限。這種情況下,jackson中其它一些靜態注解就很難實現,借助于@JsonFilter反而簡單了,下面是實現方法:

  1. @JsonFilter("role_a"
  2. public class OnlyAge extends FilterUser{ 
  3. // 不序列化age的策略  
  4. @JsonFilter("role_b"
  5. public class OnlyNameAndGender extends FilterUser{ 

接下來定義role_a和role_b的策略:

  1. @SneakyThrows 
  2. @Test 
  3. void jsonFilter() { 
  4.     SimpleFilterProvider simpleFilterProvider = new SimpleFilterProvider(); 
  5.     // role_a只展示age   
  6.     SimpleBeanPropertyFilter onlyAgeFilter = SimpleBeanPropertyFilter.filterOutAllExcept("age"); 
  7.     // role_b只排除age 
  8.     SimpleBeanPropertyFilter exceptAgeFilter = SimpleBeanPropertyFilter.serializeAllExcept("age"); 
  9.     simpleFilterProvider.addFilter("role_a", onlyAgeFilter); 
  10.     simpleFilterProvider.addFilter("role_b", exceptAgeFilter); 
  11.     objectMapper.setFilterProvider(simpleFilterProvider); 
  12.  
  13.     //被JsonFilter標記的類 
  14.     OnlyAge onlyAgeUser = new OnlyAge(); 
  15.     onlyAgeUser.setName("felord.cn"); 
  16.     onlyAgeUser.setGender(Gender.MALE); 
  17.     onlyAgeUser.setAge(22); 
  18.  
  19.     OnlyNameAndGender onlyNameAndGenderUser = new OnlyNameAndGender(); 
  20.     onlyNameAndGenderUser.setName("felord.cn"); 
  21.     onlyNameAndGenderUser.setGender(Gender.MALE); 
  22.     onlyNameAndGenderUser.setAge(22); 
  23.  
  24.     String onlyAge = objectMapper.writeValueAsString(onlyAgeUser); 
  25.     // 序列化的json中找不到name節點會拋出PathNotFoundException異常 
  26.     Assertions.assertThrows(PathNotFoundException.class, () -> JsonPath.parse(onlyAge) 
  27.             .read(JsonPath.compile("$.name"))); 
  28.     String onlyNameAndGender = objectMapper.writeValueAsString(onlyNameAndGenderUser); 
  29.     // 序列化的json中找不到age節點會拋出PathNotFoundException異常 
  30.     Assertions.assertThrows(PathNotFoundException.class, () -> JsonPath.parse(onlyNameAndGender) 
  31.             .read(JsonPath.compile("$.age"))); 

思考:結合AOP甚至是Spring Security是不是有搞頭?

小結

Jackson是一款非常優秀的json類庫,提供了豐富的注解來滿足各種場景的需要。本篇介紹了一部分注解的用法和場景。胖哥也根據日常一些場景的需要結合這些注解設計了不少動態的、可擴展的、通用的序列化和反序列化功能,用起來非常方便順手。只有掌握了技術才能運用技術,后續計劃把剩下所有的注解都梳理出來分享給大家。另外keycloak的教程也在準備中,還請多多關注和支持。

本文轉載自微信公眾號「碼農小胖哥」,可以通過以下二維碼關注。轉載本文請聯系碼農小胖哥公眾號。

 

責任編輯:武曉燕 來源: 碼農小胖哥
相關推薦

2013-01-24 13:39:32

中興華為企業運維

2011-03-09 13:03:05

諾西摩托羅拉企業并購

2012-03-05 09:37:43

2023-03-27 22:16:03

2009-03-18 08:41:54

日立巨虧總裁

2009-03-18 08:29:23

NVIDIA上網本移動OS

2024-08-05 10:01:54

VR/AR

2025-11-11 01:00:00

OpenAIOpenAI虧損OpenAI盈利

2023-08-26 11:36:31

Java框架Spring

2024-05-07 08:23:03

Spring@Async配置

2015-08-04 13:14:20

賺錢虧錢大數據

2025-01-13 12:46:31

SpringBootJacksonJSON

2020-12-02 16:13:30

比特幣投資

2023-09-28 09:07:54

注解失效場景

2019-12-10 15:30:27

SaaSIaaS云計算

2021-12-30 12:30:01

Java注解編譯器

2022-02-19 07:41:36

Bean注解項目

2022-02-20 07:28:13

Spring注解用法

2023-07-26 00:32:33

注解抽象spring
點贊
收藏

51CTO技術棧公眾號

你懂的成人av| 91久久国语露脸精品国产高跟| 精品国产三区在线| 亚洲国产视频在线| 久99九色视频在线观看| 三上悠亚 电影| 午夜伦理福利在线| 国产精品人妖ts系列视频| 亚洲精品欧美极品| 久久亚洲精品国产| 国产精品88久久久久久| 天天亚洲美女在线视频| 日本一区二区在线视频| 99国产精品99| 久久久久久久尹人综合网亚洲 | 日本暖暖在线视频| 高清成人在线观看| 国产精品wwww| 国产无遮挡又黄又爽又色| 精品国产一区二区三区久久久蜜臀| 91精品国产黑色紧身裤美女| 黄色片视频在线免费观看| 国产熟女精品视频| 亚洲专区免费| 欧美成人免费小视频| 天堂久久精品忘忧草| 亚洲一区二区三区四区电影| 欧美午夜电影网| 国产老熟妇精品观看| 免费在线毛片网站| 久久精品国产精品青草| 97色在线观看| 熟妇高潮一区二区| 青青在线精品| 国产精品福利一区二区三区| 精品国产乱码久久久久久108| 一区二区的视频| 久久婷婷一区| 97精品国产aⅴ7777| 中文字幕另类日韩欧美亚洲嫩草| 国产成人一区二区三区影院| 亚洲国产精品成人精品 | 亚洲国产第一| 久久影视电视剧免费网站| 中文字幕免费在线看线人动作大片| 国产精品一区二区三区美女| 欧美一卡二卡三卡四卡| 四季av一区二区三区| 高清电影一区| 色综合久久中文字幕综合网| 无码专区aaaaaa免费视频| 天堂av在线电影| 亚洲免费观看高清完整| 亚洲美女自拍偷拍| 黄色av电影在线播放| 亚洲欧洲精品一区二区三区| 亚洲一区二区高清视频| av免费观看一区二区| 国产欧美日韩精品a在线观看| 欧美精品123| 青青草在线免费视频| 99久久综合狠狠综合久久| 国产伦精品一区二区三区视频黑人 | 91精品专区| 中文字幕欧美激情一区| 亚洲国内在线| 久操视频在线免费播放| 亚洲天堂福利av| avove在线观看| 日本一级理论片在线大全| 洋洋av久久久久久久一区| 成年丰满熟妇午夜免费视频| 中文在线观看免费| 亚洲一卡二卡三卡四卡五卡| 超碰成人在线免费观看| 色黄网站在线观看| 亚洲一区二区三区美女| 国产视频一视频二| 91女主播在线观看| av蜜臀在线| 91麻豆国产自产在线观看| 久久手机视频| www.91在线| 亚洲乱码日产精品bd| 99热久久这里只有精品| 中文字幕在线免费观看视频| 欧美亚洲一区二区在线观看| 欧美在线a视频| 精品人人人人| 国产性猛交xxxx免费看久久| 在线观看黄网址| 尤物在线精品| 国产精品美女主播| www.亚洲黄色| 91啦中文在线观看| 亚洲图片小说在线| 国产探花视频在线观看| 色视频欧美一区二区三区| 警花观音坐莲激情销魂小说| 高端美女服务在线视频播放| 国产精品乱码久久久久久| 国产一区二区美女视频| 日韩欧美亚洲在线| 九一国产在线| 亚洲精品乱码久久久久久久久| 欧美啪啪免费视频| 国产成人亚洲一区二区三区| 精品国产乱码91久久久久久网站| av网在线播放| 亚洲激情专区| 国产主播欧美精品| 午夜影院在线视频| 亚洲美女一区二区三区| 97在线免费公开视频| 精品一区二区三区中文字幕| 亚洲欧美国产视频| 亚洲女则毛耸耸bbw| 国产精选一区| 久久久噜噜噜久久久| 一区二区视频网站| 99久久精品国产精品久久| 亚洲午夜激情| 人人鲁人人莫人人爱精品| 欧美r级电影在线观看| 中文字幕av一区二区三区人妻少妇 | 女性生殖扒开酷刑vk| 欧美日韩精品一区二区视频| 午夜精品www| 国产理论片在线观看| 久久久国产一区二区三区四区小说 | 毛茸茸free性熟hd| 国产精品久久久久久久免费观看| 琪琪第一精品导航| 国产性70yerg老太| 日本午夜一区二区| 美脚丝袜一区二区三区在线观看| 污视频网站在线免费| 欧美久久久久久久久中文字幕| av女人的天堂| 亚洲永久免费| 精品国产一区二区三区四区精华| 天堂8中文在线| 日韩欧美一区二区视频| 999精品在线视频| 日韩电影免费在线看| 欧美国产视频在线观看| 成人三级高清视频在线看| 日韩免费观看高清完整版 | 欧美日韩综合| 亚洲综合第一页| dy888亚洲精品一区二区三区| 欧美日韩国产一级二级| 伊人色在线视频| 日韩免费视频| 国产噜噜噜噜久久久久久久久| 成人影院免费观看| 欧日韩精品视频| 欧美丝袜在线观看| 色综合咪咪久久网| 国产日韩精品在线观看| 网友自拍视频在线| 欧美精品亚洲二区| 伊人在线视频观看| 国产一区二区导航在线播放| 在线观看视频黄色| 日韩区欧美区| 久久久久亚洲精品成人网小说| 女人18毛片一区二区三区| 亚洲成人综合视频| 97香蕉碰碰人妻国产欧美| 一本久久综合| 日本一区二区在线视频| 久久精品97| 欧美成人第一页| 丁香花免费高清完整在线播放| 亚洲3atv精品一区二区三区| 插吧插吧综合网| 91精品秘密在线观看| 成人两性免费视频| 日本无删减在线| 国产丝袜一区视频在线观看| 一级成人黄色片| 国产精品色哟哟网站| 超碰在线免费av| 亚洲国产黄色| 亚洲va韩国va欧美va精四季| 九色精品蝌蚪| 4k岛国日韩精品**专区| 98在线视频| 日韩免费在线观看| 中文字幕一区在线播放| 亚洲色图第一区| 成人手机在线免费视频| 美女一区二区视频| 久久艳妇乳肉豪妇荡乳av| 偷拍视频一区二区三区| 久久黄色av网站| 天天干天天色天天| 亚洲激情在线激情| free性中国hd国语露脸| 美女爽到高潮91| 成人网站免费观看入口| 欧美三级三级| 高清国产在线一区| 秋霞国产精品| 久久久人成影片一区二区三区观看 | www.av精品| 日本高清久久久| 国产亚洲欧洲| 青青草视频国产| 青青草国产成人a∨下载安卓| 成人看片在线| 欧美综合影院| 国产成人+综合亚洲+天堂| 亚洲国产精品精华素| 一本一本久久a久久精品牛牛影视| 亚洲国产精品久久久久爰性色 | 天天影视综合色| 影音先锋亚洲一区| 一本色道久久综合亚洲精品婷婷 | 亚洲视频日韩精品| 精品人妻av一区二区三区| 欧美视频在线一区二区三区| 影音先锋亚洲天堂| 中文字幕中文字幕在线一区 | 97久久精品视频| 巨大荫蒂视频欧美大片| 亚洲新中文字幕| 熟妇人妻av无码一区二区三区| 欧美一区二区三区精品| 亚洲无码久久久久| 国产精品网站在线| 亚洲观看黄色网| 懂色av一区二区在线播放| 亚洲18在线看污www麻豆| 日韩专区一卡二卡| 欧美性大战久久久久xxx| 999亚洲国产精| 欧美一区二区视频在线播放| 欧美自拍一区| 国产激情美女久久久久久吹潮| 国产一区二区视频在线看| 国产精品影片在线观看| 小黄鸭精品aⅴ导航网站入口| 97在线看免费观看视频在线观看| 久草成色在线| 欧美激情国产高清| 污污影院在线观看| 久久久久久久久电影| 密臀av在线| 国产69精品99久久久久久宅男| 日韩免费影院| 久久久久五月天| 天堂а√在线最新版中文在线| 97精品一区二区视频在线观看| 999福利在线视频| 97婷婷涩涩精品一区| 亚洲第一av| 欧美最顶级丰满的aⅴ艳星| 亚洲三级欧美| 国产成人一区二| 成人在线视频免费看| 91精品国产综合久久香蕉| 在线播放成人| 91视频免费在线观看| 一区二区三区欧洲区| 国产乱码精品一区二区三区日韩精品 | segui88久久综合9999| 久久久亚洲网站| 小h片在线观看| 国产成人在线精品| 国产一区二区色噜噜| 91网在线免费观看| 风间由美一区二区av101| 精品一区国产| 欧美自拍偷拍| 国产精品久久成人免费观看| 亚洲一级二级| 毛片av免费在线观看| 久久99精品久久久久久国产越南 | 久久久久999| 福利在线导航136| 91高清视频免费| 国产成人精选| 国产成人精品免费视频大全最热| 亚州综合一区| 国产一区视频在线| 精品国产鲁一鲁****| 激情欧美一区二区三区中文字幕| 国产一区二区三区不卡视频网站| 玖玖精品在线视频| 一区二区黄色| 毛片毛片毛片毛| 99热精品一区二区| 日韩免费成人av| 一区二区三区在线免费| 国产精品免费精品一区| 91麻豆精品国产91久久久久久久久 | 免费在线观看视频一区| 国产乱淫av片| 欧美国产精品v| 亚洲国产精品午夜在线观看| 欧美亚洲综合久久| 亚洲美女性生活| 深夜福利日韩在线看| 国产精品论坛| 亚洲伊人一本大道中文字幕| 国产一区二区三区天码| 久久精品xxx| 久久精品国产亚洲一区二区三区| 亚洲av成人片色在线观看高潮 | 日韩在线视频二区| 黄视频网站在线观看| 91在线免费看网站| 国产99久久精品一区二区300| 久久艹国产精品| 国产最新精品免费| 香蕉视频久久久| 亚洲 欧美综合在线网络| 国产乱码久久久久| 在线观看欧美成人| 92国产精品| 国产一级精品aaaaa看| 一本一道久久a久久精品蜜桃| 亚洲三级视频网站| 久久九九国产精品| 国产精品不卡av| 日韩欧美国产小视频| 国产乱色在线观看| 国产精品日韩在线播放| 亚洲人亚洲人色久| av高清在线免费观看| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 麻豆tv在线播放| 国产成人午夜视频| 中文字幕电影av| 91麻豆精品国产91久久久更新时间| 超碰国产在线观看| 国产成人精品免费久久久久| 亚洲日本三级| 动漫av免费观看| 青草国产精品久久久久久| 亚洲精品女人久久久| 亚洲成人动漫av| 内射后入在线观看一区| 欧美精品第一页在线播放| 亚洲网一区二区三区| 国产在线无码精品| 国产福利91精品| 九九热精品免费视频| 日韩欧美国产综合在线一区二区三区| 2020国产在线视频| 99一区二区| 一区二区亚洲精品| 制服丝袜第一页在线观看| 亚洲电影一区二区| 色呦呦视频在线| 欧美亚洲国产另类| 一道本一区二区三区| 免费裸体美女网站| 中文字幕av在线一区二区三区| 中文字幕精品无码亚| 日韩亚洲欧美中文高清在线| 国产日韩欧美中文在线| 日韩成人三级视频| 成a人片亚洲日本久久| 久久免费激情视频| 一本色道久久88精品综合| 欧美91在线|欧美| 乱子伦一区二区| 成+人+亚洲+综合天堂| 人妻 日韩精品 中文字幕| 永久免费精品影视网站| 99国内精品久久久久| 欧美一区二区视频在线播放| 久久综合中文字幕| 亚洲自拍偷拍另类| 欧美激情视频免费观看| 亚洲精品蜜桃乱晃| 小明看看成人免费视频| 亚洲图片一区二区| 成人在线免费观看| 91传媒视频免费| 欧美一级二区| 91杏吧porn蝌蚪| 精品亚洲aⅴ在线观看| 欧美黄色成人| 日本中文字幕网址| 国产精品美女久久久久高潮| 午夜久久久久久噜噜噜噜| 日本欧美精品在线| 久久久人成影片免费观看| 在线观看国产网站| 欧美精品色一区二区三区| 男女在线观看视频| 日韩妆和欧美的一区二区| 加勒比av一区二区| av大全在线观看| 欧美精品在线看| 欧美亚洲激情|