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

深入解析SpringBoot默認JSON解析器及自定義字段序列化策略

開發 前端
SpringBoot? 中對依賴都做了很好的封裝,可以看到很多 spring-boot-starter-xxx?系列的依賴,這是 SpringBoot? 的特點之一,不需要人為去引入很多相關的依賴了,starter-xxx? 系列直接都包含了所必要的依賴,所以我們再次點進去上面這個 spring-boot-starter-json 依賴,

前言

在我們開發項目API接口的時候,一些沒有數據的字段會默認返回NULL,數字類型也會是NULL,這個時候前端希望字符串能夠統一返回空字符,數字默認返回0,那我們就需要自定義json序列化處理

默認的json解析方案

我們知道在SpringBoot中有默認的Json解析器,SpringBoot 中默認使用的 Json 解析技術框架是 jackson。

點開 pom.xml 中的 spring-boot-starter-web 依賴,可以看到一個 spring-boot-starter-json依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-json</artifactId>
    <version>2.4.7</version>
    <scope>compile</scope>
  </dependency>

SpringBoot 中對依賴都做了很好的封裝,可以看到很多 spring-boot-starter-xxx系列的依賴,這是 SpringBoot 的特點之一,不需要人為去引入很多相關的依賴了,starter-xxx 系列直接都包含了所必要的依賴,所以我們再次點進去上面這個 spring-boot-starter-json 依賴,可以看到:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.11.4</version>
    <scope>compile</scope>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jdk8</artifactId>
    <version>2.11.4</version>
    <scope>compile</scope>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.11.4</version>
    <scope>compile</scope>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-parameter-names</artifactId>
    <version>2.11.4</version>
    <scope>compile</scope>
  </dependency>

我們在返回json時候通過注解@ResponseBody就可以自動幫我們將服務端返回的對象序列化成json字符串,在傳遞json body參數時候 通過在對象參數上@RequestBody注解就可以自動幫我們將前端傳過來的json字符串反序列化成java對象,這些功能都是通過HttpMessageConverter這個消息轉換工具類來實現的

SpringMVC自動配置了Jackson和Gson的HttpMessageConverter,SpringBoot對此做了自動化配置

  • JacksonHttpMessageConvertersConfiguration
@Configuration(proxyBeanMethods = false)
 @ConditionalOnClass(ObjectMapper.class)
 @ConditionalOnBean(ObjectMapper.class)
 @ConditionalOnProperty(name = HttpMessageConvertersAutoConfiguration.PREFERRED_MAPPER_PROPERTY,
   havingValue = "jackson", matchIfMissing = true)
 static class MappingJackson2HttpMessageConverterConfiguration {

  @Bean
  @ConditionalOnMissingBean(value = MappingJackson2HttpMessageConverter.class,
    ignoredType = {
      "org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter",
      "org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter" })
  MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
   return new MappingJackson2HttpMessageConverter(objectMapper);
  }

 }
  • GsonHttpMessageConvertersConfiguration
@Configuration(proxyBeanMethods = false)
 @ConditionalOnBean(Gson.class)
 @Conditional(PreferGsonOrJacksonAndJsonbUnavailableCondition.class)
 static class GsonHttpMessageConverterConfiguration {

  @Bean
  @ConditionalOnMissingBean
  GsonHttpMessageConverter gsonHttpMessageConverter(Gson gson) {
   GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
   converter.setGson(gson);
   return converter;
  }

 }

正文

自定義JSON解析

日期格式解析

使用@JsonFormat注解自定義格式

@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;

但是這種要對每個實體類中的日期字段都需要添加此注解不夠靈活,在配置文件中直接添加spring.jackson.date-format=yyyy-MM-dd

NULL字段不返回

使用@JsonInclude注解

@JsonInclude(JsonInclude.Include.NON_NULL)
private String title;

這種要對每個實體類中的字段都需要添加此注解不夠靈活,在配置文件中直接添加Spring.jackson.default-property-inclusion=non_null

自定義字段序列化

自定義null字符串類型字段返回空字符

public class NullStringJsonSerializer extends JsonSerializer {
    @Override
    public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (o == null) {
            jsonGenerator.writeString("");
        }
    }
}

自定義null數字類型字段返回0

public class NullIntegerJsonSerializer extends JsonSerializer {
    @Override
    public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (o == null) {
            jsonGenerator.writeNumber(0);
        }
    }
}

自定義浮點小數類型4舍5入保留2位小數

public class DoubleJsonSerialize extends JsonSerializer {
    private DecimalFormat df = new DecimalFormat("##.00");

    @Override
    public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (value != null) {
            jsonGenerator.writeString(NumberUtil.roundStr(value.toString(), 2));
        }else{
            jsonGenerator.writeString("0.00");
        }

    }
}

處理數組類型的null值

public class NullArrayJsonSerializer extends JsonSerializer {

    @Override
    public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if(o==null){
            jsonGenerator.writeStartArray();
        }else {
            jsonGenerator.writeObject(o);
        }
    }
}

自定義BeanSerializerModifier

public class MyBeanSerializerModifier extends BeanSerializerModifier {

    private JsonSerializer _nullArrayJsonSerializer = new NullArrayJsonSerializer();

    private JsonSerializer _nullStringJsonSerializer = new NullStringJsonSerializer();

    private JsonSerializer _nullIntegerJsonSerializer = new NullIntegerJsonSerializer();

    private JsonSerializer _doubleJsonSerializer = new DoubleJsonSerialize();

    @Override
    public List changeProperties(SerializationConfig config, BeanDescription beanDesc,
                                 List beanProperties) { 
         // 循環所有的beanPropertyWriter
        for (int i = 0; i < beanProperties.size(); i++) {
            BeanPropertyWriter writer = (BeanPropertyWriter) beanProperties.get(i);
            // 判斷字段的類型,如果是array,list,set則注冊nullSerializer
            if (isArrayType(writer)) { 
                //給writer注冊一個自己的nullSerializer
                writer.assignNullSerializer(this.defaultNullArrayJsonSerializer());
            }
            if (isStringType(writer)) {
                writer.assignNullSerializer(this.defaultNullStringJsonSerializer());
            }
            if (isIntegerType(writer)) {
                writer.assignNullSerializer(this.defaultNullIntegerJsonSerializer());
            }
            if (isDoubleType(writer)) {
                writer.assignSerializer(this.defaultDoubleJsonSerializer());
            }
        }
        return beanProperties;
    } 
    
    // 判斷是什么類型
    protected boolean isArrayType(BeanPropertyWriter writer) {
        Class clazz = writer.getPropertyType();
        return clazz.isArray() || clazz.equals(List.class) || clazz.equals(Set.class);
    }

    protected boolean isStringType(BeanPropertyWriter writer) {
        Class clazz = writer.getPropertyType();
        return clazz.equals(String.class);
    }

    protected boolean isIntegerType(BeanPropertyWriter writer) {
        Class clazz = writer.getPropertyType();
        return clazz.equals(Integer.class) || clazz.equals(int.class) || clazz.equals(Long.class);
    }

    protected boolean isDoubleType(BeanPropertyWriter writer) {
        Class clazz = writer.getPropertyType();
        return clazz.equals(Double.class) || clazz.equals(BigDecimal.class);
    }


    protected JsonSerializer defaultNullArrayJsonSerializer() {
        return _nullArrayJsonSerializer;
    }

    protected JsonSerializer defaultNullStringJsonSerializer() {
        return _nullStringJsonSerializer;
    }

    protected JsonSerializer defaultNullIntegerJsonSerializer() {
        return _nullIntegerJsonSerializer;
    }

    protected JsonSerializer defaultDoubleJsonSerializer() {
        return _doubleJsonSerializer;
    }
}

應用我們自己bean序列化使其生效

@Configuration
public class ClassJsonConfiguration {
    @Bean
    public MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter() {
        final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();

        ObjectMapper mapper = converter.getObjectMapper();

        // 為mapper注冊一個帶有SerializerModifier的Factory,此modifier主要做的事情為:判斷序列化類型,根據類型指定為null時的值

        mapper.setSerializerFactory(mapper.getSerializerFactory().withSerializerModifier(new MyBeanSerializerModifier()));

        return converter;
    }
}

此類會代替SpringBoot默認的json解析方案。事實上,此類中起作用的是ObjectMapper 類,因此也可直接配置此類

@Bean
  public ObjectMapper om() {
      ObjectMapper mapper = new ObjectMapper();
      // 為mapper注冊一個帶有SerializerModifier的Factory,此modifier主要做的事情為:判斷序列化類型,根據類型指定為null時的值

      mapper.setSerializerFactory(mapper.getSerializerFactory().withSerializerModifier(new MyBeanSerializerModifier()));
      return mapper;
  }

jackson詳細配置

spring:
    jackson:
      # 設置屬性命名策略,對應jackson下PropertyNamingStrategy中的常量值,SNAKE_CASE-返回的json駝峰式轉下劃線,json body下劃線傳到后端自動轉駝峰式
      property-naming-strategy: SNAKE_CASE
      # 全局設置@JsonFormat的格式pattern
      date-format: yyyy-MM-dd HH:mm:ss
      # 當地時區
      locale: zh
      # 設置全局時區
      time-zone: GMT+8
      # 常用,全局設置pojo或被@JsonInclude注解的屬性的序列化方式
      default-property-inclusion: NON_NULL #不為空的屬性才會序列化,具體屬性可看JsonInclude.Include
      # 常規默認,枚舉類SerializationFeature中的枚舉屬性為key,值為boolean設置jackson序列化特性,具體key請看SerializationFeature源碼
      serialization:
        WRITE_DATES_AS_TIMESTAMPS: true # 返回的java.util.date轉換成timestamp
        FAIL_ON_EMPTY_BEANS: true # 對象為空時是否報錯,默認true
      # 枚舉類DeserializationFeature中的枚舉屬性為key,值為boolean設置jackson反序列化特性,具體key請看DeserializationFeature源碼
      deserialization:
        # 常用,json中含pojo不存在屬性時是否失敗報錯,默認true
        FAIL_ON_UNKNOWN_PROPERTIES: false
      # 枚舉類MapperFeature中的枚舉屬性為key,值為boolean設置jackson ObjectMapper特性
      # ObjectMapper在jackson中負責json的讀寫、json與pojo的互轉、json tree的互轉,具體特性請看MapperFeature,常規默認即可
      mapper:
        # 使用getter取代setter探測屬性,如類中含getName()但不包含name屬性與setName(),傳輸的vo json格式模板中依舊含name屬性
        USE_GETTERS_AS_SETTERS: true #默認false
      # 枚舉類JsonParser.Feature枚舉類中的枚舉屬性為key,值為boolean設置jackson JsonParser特性
      # JsonParser在jackson中負責json內容的讀取,具體特性請看JsonParser.Feature,一般無需設置默認即可
      parser:
        ALLOW_SINGLE_QUOTES: true # 是否允許出現單引號,默認false
      # 枚舉類JsonGenerator.Feature枚舉類中的枚舉屬性為key,值為boolean設置jackson JsonGenerator特性,一般無需設置默認即可
      # JsonGenerator在jackson中負責編寫json內容,具體特性請看JsonGenerator.Feature

責任編輯:武曉燕 來源: 一安未來
相關推薦

2011-04-27 10:31:38

Java

2022-07-11 10:37:41

MapPart集合

2021-03-16 10:39:29

SpringBoot參數解析器

2025-05-08 08:30:00

Redis自定義序列化數據庫

2025-03-05 10:49:32

2022-05-11 10:45:21

SpringMVC框架Map

2013-01-14 11:40:50

IBMdW

2014-12-10 10:37:45

Android自定義布局

2020-12-02 10:13:45

JacksonJDK解析器

2025-03-13 07:33:46

Spring項目開發

2021-03-18 10:56:59

SpringMVC參數解析器

2023-06-06 08:01:18

自定義接口響應

2022-02-14 13:58:32

操作系統JSON格式鴻蒙

2025-03-10 01:00:00

Spring參數解析器

2022-01-06 06:23:49

Swagger參數解析器

2009-09-09 16:30:59

C# BinaryFo

2025-06-06 02:00:00

JavaJSON字段

2011-06-01 14:50:48

2013-03-11 13:55:03

JavaJSON

2010-01-07 16:37:04

JSON解析器
點贊
收藏

51CTO技術棧公眾號

免费精品视频在线| 欧美日韩久久精品| 亚洲另类一区二区| 国产精品一区二区欧美黑人喷潮水| 国产一级免费av| 亚洲小说图片视频| 欧美顶级少妇做爰| 亚洲 欧美 日韩 国产综合 在线| 黄网在线观看| 青青草精品视频| 欧美激情aaaa| 日本爱爱爱视频| 欧美高清一级片| 偷拍日韩校园综合在线| 最新精品视频| 手机亚洲第一页| 国内久久精品视频| 日本亚洲精品在线观看| 免费在线视频观看| 成人3d动漫在线观看| 欧美va亚洲va在线观看蝴蝶网| aaa毛片在线观看| 91麻豆免费在线视频| 久久久久国产精品厨房| 亚洲自拍偷拍在线| 国产无遮挡又黄又爽又色视频| 欧美视频成人| 精品视频久久久| 三级网站免费看| 国产成人亚洲一区二区三区| 午夜精品成人在线| 久久免费一级片| av在线电影免费观看| 99热在这里有精品免费| 7777精品伊久久久大香线蕉语言| 337p粉嫩色噜噜噜大肥臀| 国语对白精品一区二区| 日韩一中文字幕| 一区二区三区伦理片| 欧美人妖在线观看| 精品久久久三级丝袜| 国产永久免费网站| 国产精品久久久久77777丨| 欧美日韩免费网站| 蜜桃传媒一区二区三区| 色帝国亚洲欧美在线| 国产精品国产a级| 日韩成人在线资源| 国产三级视频在线看| 99精品久久久久久| 久草一区二区| 性高潮久久久久久久久久| 私拍精品福利视频在线一区| 高清久久精品| 香蕉影视欧美成人| 国产片侵犯亲女视频播放| 国产大片在线免费观看| 久久人人超碰精品| 免费在线观看91| 亚洲av毛片成人精品| 成人免费不卡视频| 国产一级二级三级精品| 免费av网站观看| 成人av午夜电影| 精品国产区在线| 日av在线播放| 久久久久久久综合| 天天久久人人| 欧美成人hd| 亚洲欧美激情在线| 2018中文字幕第一页| 黑人精品视频| 精品成人在线视频| 欧美日韩在线不卡视频| 韩漫成人漫画| 欧美日韩国产在线观看| 欧美国产在线一区| xxxx日韩| 亚洲欧美日韩精品久久亚洲区| 日本xxxx裸体xxxx| 国内精品久久久久久99蜜桃| 国产一区二区动漫| 男人av资源站| 亚洲全部视频| 国产成人福利网站| 97人妻精品一区二区三区动漫| 国产一区视频网站| 久草精品电影| 天天在线视频色| 一个色妞综合视频在线观看| 国产精品久久国产| 欧美无毛视频| 日韩一级二级三级| 国产精品无码一区二区三区免费 | 少妇一级淫免费放| 国产精品一区二区三区av| 亚洲精品一区二区精华| 精品人伦一区二区| 中文字幕人成人乱码| 性色av香蕉一区二区| 中文字幕永久在线视频| 岛国精品在线观看| 午夜精品一区二区在线观看| 日本不卡影院| 在线观看日韩高清av| 亚洲国产日韩在线一区| 免费不卡中文字幕在线| 免费成人高清视频| 亚洲av无码不卡| 国产成人精品三级麻豆| 日本视频一区在线观看| 色呦呦在线看| 欧美喷潮久久久xxxxx| 91精品啪在线观看国产| 色喇叭免费久久综合| 97在线观看视频| 国产国语亲子伦亲子| 久久久久国产精品免费免费搜索| 乱熟女高潮一区二区在线| 日日夜夜天天综合| 亚洲大胆美女视频| 91在线播放观看| 蜜桃久久av一区| 精品一区二区日本| 欧美野外wwwxxx| 777欧美精品| av男人的天堂av| 激情综合激情| 成人在线精品视频| 成人欧美亚洲| 色悠久久久久综合欧美99| 在线精品视频播放| 亚洲一区二区三区| 成人黄色免费片| 福利片在线观看| 欧美日韩亚洲91| 蜜臀av粉嫩av懂色av| 婷婷中文字幕一区| 国产精品视频男人的天堂| 国产私人尤物无码不卡| 欧美日韩亚洲一区二区| 香蕉视频污视频| 欧美三级小说| 91久久极品少妇xxxxⅹ软件| 麻豆网站在线| 欧美日韩成人综合天天影院 | 免费电影一区二区三区| 国内精品视频久久| 国产成人自拍一区| 亚洲一区二区三区自拍| 永久免费看片在线观看| 亚洲男女av一区二区| 国产有码一区二区| 91福利在线视频| 欧美日韩国产电影| 少妇高潮在线观看| 久久99精品久久久| 六月婷婷激情网| 久久精品九色| 欧美精品www| 成人免费视频国产| 亚洲午夜久久久久久久久久久| 亚洲欧洲日韩综合| 黄色免费成人| 精品久久久久久中文字幕动漫| 男人天堂视频在线观看| 国产婷婷成人久久av免费高清 | 欧美性天天影视| 欧美疯狂性受xxxxx喷水图片| www日韩在线| 丁香六月综合激情| 国产l精品国产亚洲区久久| 米奇777超碰欧美日韩亚洲| 国产精品黄视频| 国产秀色在线www免费观看| 精品黑人一区二区三区久久| 97超碰人人干| 国产欧美一区二区在线| 三区视频在线观看| 亚洲大胆在线| 欧美动漫一区二区| 日韩有码欧美| 久久久久久久久久久网站| 日本视频在线观看一区二区三区| 欧美午夜影院一区| 久久久久成人精品无码| 久久综合九色综合久久久精品综合| 日本成人中文字幕在线| 国产精品黑丝在线播放| 国产精品区一区| 欧美色网一区| 欧美日韩高清区| 国产视频福利在线| 欧美一区二区播放| 久草视频一区二区| 亚洲欧美日韩中文字幕一区二区三区 | 精品免费国产| 视频欧美精品| 欧美国产欧美亚洲国产日韩mv天天看完整 | 精品国产乱码久久久久软件| 欧美v亚洲v综合v国产v仙踪林| 欧美国产第二页| 国产三级在线免费| 亚洲第一网站免费视频| 中文字幕一区二区三区四区视频| 亚洲国产精品久久一线不卡| 黑人と日本人の交わりビデオ| 成人手机电影网| 国产3p在线播放| 久久亚洲视频| 国产二区视频在线| 天天做天天爱天天综合网| 欧美人xxxxx| 国内精品国产成人国产三级粉色 | 日本午夜激情视频| 外国成人免费视频| 日本黄网免费一区二区精品| 国产乱人伦丫前精品视频| 91在线视频成人| 欧美va在线观看| 午夜精品一区二区三区在线| a级影片在线| 综合国产在线视频| 日韩午夜影院| 亚洲国产精品字幕| wwwav网站| 日韩午夜在线播放| 国产精品国产精品国产专区| 欧美少妇一区二区| 中文字幕国产在线观看| 亚洲va欧美va国产va天堂影院| √天堂中文官网8在线| 国产精品久久久久久久久久久免费看 | 国产人妻互换一区二区| 成人婷婷网色偷偷亚洲男人的天堂| 精品亚洲欧美日韩| 美女一区二区在线观看| 国产chinese精品一区二区| 麻豆精品一区| 亚洲自拍偷拍在线| 久久久久亚洲精品中文字幕| 成人激情视频小说免费下载| 久久女人天堂| 成人午夜在线视频一区| 四虎国产精品永久在线国在线| 国产精品视频专区| 国产精品传媒麻豆hd| 国产精品爽黄69| 欧美亚洲福利| 91在线免费看网站| 伊人www22综合色| 成人av资源网| 盗摄系列偷拍视频精品tp| 国产免费高清一区| 欧美日韩一区二区三区在线电影| 国产自产在线视频一区| 欧美色图婷婷| 欧美一区免费视频| 久久亚洲在线| 超碰97在线看| 亚洲激情偷拍| 国产精品无码专区av在线播放| 丝袜亚洲另类欧美| 538在线视频观看| 久久9热精品视频| 香蕉视频色在线观看| 成人免费观看视频| 亚洲国产欧美视频| 国产欧美视频一区二区| 亚洲熟女少妇一区二区| 一区二区三区在线观看动漫| 久久久精品91| 欧美日韩激情视频8区| 在线免费观看av网址| 欧美精品成人一区二区三区四区| 999久久久久| 亚洲国产精品字幕| av影片在线看| 欧美激情第6页| 亚洲天堂导航| 成人写真福利网| 精品精品国产毛片在线看| 日韩精品另类天天更新| 欧美日本一区| 欧美日韩亚洲一二三| 国产一区二区在线免费观看| 成年人的黄色片| 国产精品美女久久久久久久久 | 欧美日韩综合视频| 中文字幕一区二区人妻痴汉电车| 日韩一区二区三区视频| 人操人视频在线观看| zzijzzij亚洲日本成熟少妇| 国产精品一品| 国产欧美一区二区三区四区| 国产精品videossex| 一本一道久久久a久久久精品91| 黄色另类av| 在线能看的av网站| 91免费在线播放| 日韩a级片在线观看| 色偷偷成人一区二区三区91| 精品人妻伦一二三区久久 | 超碰在线网址| 国产成人精品999| 加勒比色综合久久久久久久久| 一区二区三区不卡在线| 国产日韩专区| 欧美一级片在线免费观看| 中文字幕国产精品一区二区| 91看片在线播放| 日韩久久精品一区| 日本视频在线观看| 人人爽久久涩噜噜噜网站| 99re6热只有精品免费观看| 亚洲精品一品区二品区三品区| 日韩亚洲国产精品| 91丨porny丨九色| 亚洲国产经典视频| 黄色片网站在线免费观看| 精品国精品国产| 哥也色在线视频| 国产精品中文久久久久久久| 亚洲国产精品嫩草影院久久av| 久久久久久久9| 国产精品羞羞答答xxdd| 久久视频一区二区三区| 91成人免费在线| 手机亚洲第一页| 91成人国产在线观看| 盗摄系列偷拍视频精品tp| 中文字幕の友人北条麻妃| 久久se精品一区精品二区| 欧美老女人性生活视频| 色婷婷综合久久久久中文一区二区| 天堂av资源在线| 久久久在线观看| 精品在线网站观看| 国产在线播放观看| 成a人片国产精品| 国产精品suv一区二区| 亚洲丁香久久久| 19禁羞羞电影院在线观看| 国产精品日韩欧美一区二区| 欧美日韩影院| 人妻 丝袜美腿 中文字幕| 一区二区三区91| 亚洲成人一二三区| 欧美激情在线一区| 精品国产18久久久久久洗澡| 久久99中文字幕| 99国内精品久久| 日韩欧美成人一区二区三区| 亚洲精品一区二区在线| 成人午夜精品| 亚洲日本精品| 国产一区二区三区在线观看免费 | 成人美女免费网站视频| 亚洲精品成人无限看| 亚洲一区二区三区三州| 亚洲国产成人av好男人在线观看| 日韩一级片免费| 日本精品视频在线观看| 日韩成人免费| www.桃色.com| 亚洲成在线观看| 美国成人毛片| 国产欧美日韩中文字幕| 亚洲欧美综合| 国产乱了高清露脸对白| 欧美主播一区二区三区美女| 成人在线播放| 国产原创精品| 日本不卡一二三区黄网| 三级全黄做爰视频| 亚洲国产精彩中文乱码av在线播放 | 国产精品视频一区二区三区不卡| 国产美女无遮挡永久免费| 欧美—级高清免费播放| 中文字幕亚洲影视| 成 人 黄 色 小说网站 s色| 亚洲综合av网| 精品美女视频在线观看免费软件 | 老司机午夜av| 综合亚洲深深色噜噜狠狠网站| 性一交一乱一伧老太| 热久久免费国产视频| 五月天激情综合网| 色婷婷免费视频| 欧美日精品一区视频| sm在线观看| 亚洲欧美日韩另类精品一区二区三区| 国产一二三精品| 亚洲第一网站在线观看| 欧美巨猛xxxx猛交黑人97人| 最新国产一区| 久久久久中文字幕亚洲精品| 在线观看亚洲精品| av男人的天堂在线观看| 亚洲欧美日产图|