精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人日韩在线| 秋霞视频一区二区| 午夜久久tv| 亚洲欧美制服综合另类| 天堂一区在线观看| 国产后进白嫩翘臀在线观看视频| 久久看人人爽人人| 亚洲自拍偷拍色图| 97人妻精品视频一区| 欧美成熟视频| 伊人伊人伊人久久| 一区二区免费在线观看视频| 另类一区二区三区| 欧美香蕉大胸在线视频观看| 免费观看中文字幕| 国产一区二区三区福利| 懂色av中文一区二区三区| 国产精品免费小视频| 五月婷婷一区二区| 成人a'v在线播放| 日韩高清av在线| 久久久久无码精品| 国产福利91精品一区二区| 亚洲444eee在线观看| 成人在线观看www| 国产污视频在线| 93久久精品日日躁夜夜躁欧美| 亚洲在线一区二区| 亚洲性猛交富婆| 免费永久网站黄欧美| 欧美激情第6页| 成人在线观看免费完整| 日韩精品永久网址| 国产午夜精品视频| 国产男女猛烈无遮挡a片漫画| 51亚洲精品| 69堂国产成人免费视频| 在线免费观看av的网站| 亚洲伦乱视频| 色综合色综合色综合| 国产精品333| av剧情在线观看| 亚洲国产视频一区| 少妇一晚三次一区二区三区| 在线中文字幕电影| 亚洲免费av网站| 日韩中文在线字幕| 黄色av网站在线播放| 亚洲欧美影音先锋| 天天做天天爱天天高潮| 国产在线更新| 有坂深雪av一区二区精品| 99re8这里只有精品| 国产一二区在线观看| 亚洲精品视频在线看| 久久久久亚洲av无码专区喷水| 免费av在线播放| 亚洲欧洲性图库| 美女在线免费视频| 男人添女人下部高潮视频在线观看| 亚洲精品免费一二三区| 菠萝蜜视频在线观看入口| 污视频免费在线观看| 亚洲一区欧美一区| 久草视频国产在线| 一二三四视频在线中文| 色综合久久久久综合| av网站在线不卡| 免费成人高清在线视频| 7777精品伊人久久久大香线蕉经典版下载 | 天天天干夜夜夜操| 99riav视频一区二区| 欧美年轻男男videosbes| av一区二区在线看| 99久久99久久久精品棕色圆| 国产成人鲁色资源国产91色综| 成人精品一二区| 午夜影院免费体验区| 久久蜜桃av一区二区天堂| 视频一区二区三区免费观看| 色大18成网站www在线观看| 亚洲精品国产精品乱码不99| www..com日韩| 亚洲欧美综合一区二区| 久久先锋资源网| 五月天婷亚洲天综合网鲁鲁鲁| 午夜视频在线看| 亚洲一二三四区不卡| 国产美女三级视频| 91精品国产一区二区在线观看 | 久久久久久久久久影视| 久久99精品久久久久久园产越南| 日韩亚洲欧美成人| 中文字幕日韩一级| 另类综合日韩欧美亚洲| 精品欧美国产| 男人资源在线播放| 精品久久久久久中文字幕| 国产九九热视频| 米奇精品关键词| 日韩在线观看免费| 国产高清中文字幕| 国产精品亚洲视频| 亚洲五月六月| 亚洲三级欧美| 日韩欧美激情一区| 国产精品一区二区亚洲| 亚洲视频大全| 91精品国产一区二区三区动漫 | 456亚洲影院| 国产女主播福利| 国产日韩欧美制服另类| 搞av.com| 国产亚洲字幕| 色偷偷av一区二区三区| 九九九在线观看| 成人精品小蝌蚪| 中文字幕一区二区三区有限公司 | 在线精品一区二区| 91九色国产视频| 成人动漫在线播放| 欧美午夜无遮挡| 水蜜桃av无码| 最新国产拍偷乱拍精品| 91成人免费视频| 黄色免费在线网站| 欧美福利视频导航| 国产一区在线观看免费| 爽好久久久欧美精品| 久久精品中文字幕一区二区三区 | 色综合久久综合| 国产xxxxxxxxx| 狠狠综合久久av一区二区老牛| 91美女片黄在线观| 在线观看麻豆| 欧美日韩国产一级片| 中文字幕91视频| 日产欧产美韩系列久久99| 欧美在线一二三区| 桃色一区二区| 亚洲一区二区国产| 波多野结衣一二区| 欧美经典三级视频一区二区三区| 精品久久久久久久免费人妻| 伊人成综合网yiren22| 日本国产一区二区三区| 日本一二三区在线视频| 日韩欧美成人免费视频| 五月天综合视频| 日本在线观看不卡视频| 亚洲午夜精品久久| 韩国一区二区三区视频| 日韩一区二区三区视频| 男人av资源站| 国产精品综合视频| 国产乱淫av片杨贵妃| 女仆av观看一区| 日本亚洲欧美三级| 二区三区在线播放| 9191国产精品| 免费麻豆国产一区二区三区四区| 国产成人精品aa毛片| 欧美精品一区二区三区三州| 久草成人资源| 成人h片在线播放免费网站| 国产在线激情| 精品sm捆绑视频| 毛片基地在线观看| 国产精品丝袜91| 992tv人人草| 九九综合九九| 国产精品狠色婷| 日本xxxx人| 欧美性猛交xxxx乱大交蜜桃| 最近中文字幕在线mv视频在线| 麻豆成人久久精品二区三区小说| 麻豆映画在线观看| 果冻天美麻豆一区二区国产| 国产成人精品午夜| 激情成人四房播| 亚洲成av人影院在线观看| 日本中文字幕第一页| 国产精品黄色在线观看| 天天躁日日躁狠狠躁免费麻豆| 性欧美videos另类喷潮| 偷拍盗摄高潮叫床对白清晰| 国产丝袜一区| 国产精品美女久久久免费| 午夜伦理在线视频| 亚洲人午夜精品| 高清一区二区三区四区| 欧洲一区在线电影| 国产一级在线观看视频| 国产精品美女一区二区三区 | 久久久国际精品| 色欲欲www成人网站| 视频一区二区三区中文字幕| 蜜桃视频成人在线观看| 久久91麻豆精品一区| 99在线看视频| 国产成人毛片| 2021国产精品视频| 岛国成人毛片| 中文字幕欧美精品日韩中文字幕| 欧美特黄一级视频| 欧美群妇大交群的观看方式| 久久久午夜影院| 亚洲免费av观看| 日本在线观看网址| 久久亚洲综合色一区二区三区| 日本wwwxx| 久久精品国产亚洲aⅴ| 久久久久久久久久福利| 尤物在线精品| 超碰10000| 91影院成人| 日韩av一区二区三区在线| 日韩成人一级| 岛国一区二区三区高清视频| 亚洲午夜国产成人| 国产精品日韩精品| 伊人久久综合一区二区| 久久久久国产视频| bt在线麻豆视频| 日韩中文字幕网址| 天堂а√在线官网| 中文字幕日韩欧美精品在线观看| 精品成人一区二区三区免费视频| 日韩精品极品在线观看播放免费视频| www.av网站| 日韩精品专区在线影院观看| 国产视频手机在线观看| 欧美丰满少妇xxxxx高潮对白| 天天干天天插天天射| 色94色欧美sute亚洲13| 日韩不卡视频在线| 一本久道中文字幕精品亚洲嫩| 日产亚洲一区二区三区| 亚洲成av人片www| 黄网站免费在线| 亚洲国产日韩一区二区| 久草精品视频在线观看| 亚洲va欧美va天堂v国产综合| 久久精品国产亚洲av无码娇色| 一区二区三区在线视频观看58| 国产大片免费看| 亚洲女人的天堂| 欧美成人综合色| 亚洲国产一区二区三区青草影视| 精品肉丝脚一区二区三区| 亚洲综合激情网| 日韩视频免费观看高清| 日韩欧美在线视频免费观看| 亚洲av无码精品一区二区| 色婷婷一区二区三区四区| 国产一级片av| 欧美日本一区二区| 国产av精国产传媒| 精品国产91乱码一区二区三区| 蜜桃91麻豆精品一二三区| 亚洲激情国产精品| 欧洲一区av| 色吧影院999| 在线中文免费视频| 91福利视频在线观看| 日韩制服一区| 亚洲最大av在线| 精品综合久久88少妇激情| 茄子视频成人在线观看| 色综合久久网| 成人黄色大片网站| 免费亚洲网站| 婷婷中文字幕在线观看| 粉嫩在线一区二区三区视频| 韩国无码一区二区三区精品| 国产目拍亚洲精品99久久精品| www欧美com| 欧美视频一区二区三区…| 中文字幕在线观看你懂的| 日韩欧美另类在线| 黄色在线视频观看网站| 久久精品国产一区| 日韩伦理在线一区| 91精品国产自产在线老师啪| 国产精品国产| 亚洲成人av动漫| 在线成人国产| 欧美男女交配视频| 99久久免费国产| 影音先锋男人资源在线观看| 香蕉久久一区二区不卡无毒影院| 免费精品一区二区| 精品国产一区二区亚洲人成毛片 | 国产精品毛片大码女人| 久久人人爽人人爽人人| 欧美在线影院一区二区| 国产高清不卡视频| caoporn成人免费视频在线| 中文字幕九色91在线| 蜜桃传媒在线观看免费进入 | 色狠狠一区二区三区| 国产视频一区二区三区四区| 欧美aaaa视频| 欧美黄网站在线观看| 国产精品一区二区无线| 精品人妻一区二区三区四区| 亚洲福利视频导航| 国产尤物在线观看| 伊人久久精品视频| 亚洲精品一区| 精品国产中文字幕| 欧美日本不卡| 不用播放器的免费av| 久久精品视频网| 国产成人无码一区二区三区在线| 制服视频三区第一页精品| 成年人视频网站在线| 欧美一区二区三区精品电影| 北条麻妃在线一区二区免费播放 | 成人黄色a级片| 香蕉久久一区二区不卡无毒影院 | 久久视频一区二区| 久久精品视频久久| 日韩欧美国产一区二区三区| 午夜激情在线观看| 国产欧美日韩精品丝袜高跟鞋| 亚洲精品蜜桃乱晃| 99热在线这里只有精品| www.日韩在线| 国产午夜福利一区二区| 欧美成人性福生活免费看| 超碰在线caoporn| 成人午夜小视频| 欧美超碰在线观看| 成人av在线资源网| 欧美激情国产精品免费| 欧美一级片在线看| 国产视频中文字幕在线观看| 国产日韩在线观看av| 不卡av一区二区| 亚洲欧美国产日韩综合| 中文字幕欧美激情| 亚洲天堂手机版| 久久激情视频久久| 亚洲成a人片777777久久| 这里只有精品66| 国产资源在线一区| 人妻人人澡人人添人人爽| 制服丝袜亚洲网站| 中文在线字幕免费观看| 91手机在线播放| 亚洲精品免费观看| 国产精品1000部啪视频| 欧美性生交大片免费| 国产午夜在线视频| 国产日韩欧美视频在线| 五月婷婷六月综合| 久久久久无码精品| 五月天亚洲婷婷| 日韩在线无毛| 国产精品日韩欧美| 2023国产精品久久久精品双| 韩国一区二区三区四区| 精品久久久久久亚洲精品| 国内在线精品| 国产欧美日韩免费| 欧美一区二区| 菠萝菠萝蜜网站| 欧美色倩网站大全免费| 91香蕉在线观看| 国内精品久久久久久久果冻传媒| 久久精品天堂| 强制高潮抽搐sm调教高h| 亚洲精品一线二线三线无人区| 国产精品专区免费| 强伦女教师2:伦理在线观看| 国产91精品欧美| av毛片在线免费观看| 久久精品色欧美aⅴ一区二区| 高清精品视频| 欧美性大战久久久久xxx | 欧美日韩在线精品| 久久成人18免费观看| 国产真人真事毛片| 自拍偷拍亚洲欧美| 动漫视频在线一区| 啊啊啊国产视频| 亚洲电影中文字幕在线观看| 免费福利在线观看| 91在线看www| 久久免费高清| 九九视频免费在线观看| 国产亚洲一区二区精品| avtt综合网| 欧美美女一级片| 色综合久久久久久久| 免费在线观看的电影网站| 日本午夜精品一区二区三区| 成人毛片老司机大片| 一区二区三区日|