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

震驚!50% 的 Java 程序員都不知道的 Jackson 高階用法(含工具類封裝)

開發 前端
Jackson 的功能遠不止于此,建議在實踐中結合官方文檔深入探索,例如多態序列化、自定義模塊、性能調優等,能讓你的 JSON 處理能力更上一層樓。?

在當下的 Java 開發中,JSON 數據處理已經成為繞不開的核心技能。無論是 Web API、微服務通信,還是前后端交互,JSON 都是事實上的通用標準。

在眾多 JSON 解析框架中,Jackson 以性能優越、功能完備、生態豐富而脫穎而出,幾乎成為企業級 Java 項目的首選工具。

但很多開發者對 Jackson 的使用仍停留在最基本的“對象與 JSON 字符串互轉”。事實上,Jackson 提供了大量高級特性,能夠幫助我們處理復雜業務場景,例如:

  • 統一日期格式
  • 處理嵌套對象與集合
  • 動態字段過濾
  • 操作 JSON 樹模型

本文將基于實際開發場景,逐步解析 Jackson 的高階用法,并給出一個經過封裝的 工具類 JacksonUtils,幫助你在日常開發中高效、優雅地處理 JSON 數據。

典型場景與解決方案

場景一:復雜對象的序列化與反序列化

需求:將 Java 對象轉為 JSON 字符串,或從 JSON 恢復成 Java 對象。方案:使用 ObjectMapper,并結合注解控制序列化行為。

import com.fasterxml.jackson.databind.ObjectMapper;


ObjectMapper mapper = new ObjectMapper();


// 對象轉 JSON
String json = mapper.writeValueAsString(user);


// JSON 轉對象
User user = mapper.readValue(json, User.class);

場景二:統一日期格式

需求:保證 JSON 中的日期字段格式統一,支持 java.util.Date 與 java.time.LocalDateTime。方案:注冊 JavaTimeModule 并指定格式化規則。

package com.icoderoad.utils;


import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;


import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;


public class JacksonUtils {
    private static final ObjectMapper mapper;
    private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";


    static {
        mapper = new ObjectMapper();


        JavaTimeModule timeModule = new JavaTimeModule();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_TIME_FORMAT);


        timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(formatter));
        timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(formatter));


        mapper.registerModule(timeModule);
    }


    public static String toJsonWithFormat(Object obj) {
        try {
            return mapper.writeValueAsString(obj);
        } catch (Exception e) {
            throw new RuntimeException("日期格式化失敗", e);
        }
    }
}

場景三:嵌套對象與集合處理

需求:解析包含復雜嵌套結構的 JSON(如訂單、商品、分類)。方案:借助 TypeReference 處理泛型集合。

import com.fasterxml.jackson.core.type.TypeReference;
import java.util.List;
import java.util.Map;


class Order {
    private String orderId;
    private List<Product> products;
    private Map<String, Object> extraInfo;
}


class Product {
    private String productId;
    private String name;
    private double price;
}


public class JacksonUtils {
    public static <T> List<T> toList(String json, Class<T> elementClass) {
        try {
            return mapper.readValue(json,
                mapper.getTypeFactory().constructCollectionType(List.class, elementClass));
        } catch (Exception e) {
            throw new RuntimeException("JSON 轉 List 失敗", e);
        }
    }


    public static <T> T toComplexObject(String json, TypeReference<T> typeReference) {
        try {
            return mapper.readValue(json, typeReference);
        } catch (Exception e) {
            throw new RuntimeException("JSON 轉復雜對象失敗", e);
        }
    }
}

場景四:動態字段過濾

需求:根據業務場景動態控制字段序列化(如隱藏敏感信息)。方案:使用 @JsonFilter 配合 SimpleFilterProvider。

import com.fasterxml.jackson.annotation.JsonFilter;


@JsonFilter("userFilter")
class User {
    private String userId;
    private String username;
    private String password; // 敏感字段
    private String email;
}


public class JacksonUtils {
    public static String toJsonWithFilter(Object obj, String filterName, String... fieldsToExclude) {
        try {
            var filters = new com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider()
                .addFilter(filterName, 
                    com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter.serializeAllExcept(fieldsToExclude));


            return mapper.writer(filters).writeValueAsString(obj);
        } catch (Exception e) {
            throw new RuntimeException("字段過濾失敗", e);
        }
    }
}

場景五:JSON 樹模型操作

需求:直接操作 JSON 數據節點,支持動態新增、修改、刪除字段。方案:使用 JsonNode 與 ObjectNode

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;


public class JacksonUtils {
    public static JsonNode toJsonNode(String json) {
        try {
            return mapper.readTree(json);
        } catch (Exception e) {
            throw new RuntimeException("JSON 轉 JsonNode 失敗", e);
        }
    }


    public static String modifyNode(String json, String fieldName, Object newValue) {
        try {
            ObjectNode node = (ObjectNode) mapper.readTree(json);
            node.putPOJO(fieldName, newValue);
            return node.toString();
        } catch (Exception e) {
            throw new RuntimeException("修改 JSON 節點失敗", e);
        }
    }
}

完整工具類封裝

結合以上所有功能,我們封裝了一個通用的 JacksonUtils 工具類,位于路徑:

/src/main/java/com/icoderoad/utils/JacksonUtils.java

它提供:

  • 對象與 JSON 的互轉
  • 日期統一處理
  • 集合與復雜嵌套結構解析
  • 動態字段過濾
  • JSON 樹模型操作
package com.icoderoad.utils;


import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;


import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;


/**
 * Jackson JSON 工具類
 * 提供對象-JSON 轉換、日期格式化、集合解析、字段過濾、樹模型操作等功能
 */
public class JacksonUtils {


    private static final ObjectMapper mapper;
    private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";


    static {
        mapper = new ObjectMapper();


        // 序列化時忽略 null 字段
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        // 反序列化時忽略未知字段
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);


        // 配置 Java 8 時間模塊
        JavaTimeModule timeModule = new JavaTimeModule();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_TIME_FORMAT);
        timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(formatter));
        timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(formatter));


        mapper.registerModule(timeModule);
    }


    /** 對象轉 JSON 字符串 */
    public static String toJson(Object obj) {
        try {
            return mapper.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("對象轉 JSON 失敗", e);
        }
    }


    /** JSON 字符串轉對象 */
    public static <T> T toObject(String json, Class<T> clazz) {
        try {
            return mapper.readValue(json, clazz);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("JSON 轉對象失敗", e);
        }
    }


    /** JSON 轉 List */
    public static <T> List<T> toList(String json, Class<T> elementClass) {
        try {
            return mapper.readValue(json,
                    mapper.getTypeFactory().constructCollectionType(List.class, elementClass));
        } catch (JsonProcessingException e) {
            throw new RuntimeException("JSON 轉 List 失敗", e);
        }
    }


    /** JSON 轉復雜對象(如 Map、嵌套結構) */
    public static <T> T toComplexObject(String json, TypeReference<T> typeReference) {
        try {
            return mapper.readValue(json, typeReference);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("JSON 轉復雜對象失敗", e);
        }
    }


    /** 指定過濾字段進行序列化 */
    public static String toJsonWithFilter(Object obj, String filterName, String... fieldsToExclude) {
        try {
            FilterProvider filters = new SimpleFilterProvider()
                    .addFilter(filterName, SimpleBeanPropertyFilter.serializeAllExcept(fieldsToExclude));
            return mapper.writer(filters).writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("JSON 序列化字段過濾失敗", e);
        }
    }


    /** JSON 轉 JsonNode */
    public static JsonNode toJsonNode(String json) {
        try {
            return mapper.readTree(json);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("JSON 轉 JsonNode 失敗", e);
        }
    }


    /** 獲取 JsonNode 中指定字段值 */
    public static String getNodeValue(JsonNode node, String fieldName) {
        JsonNode valueNode = node.get(fieldName);
        return valueNode != null ? valueNode.asText() : null;
    }


    /** 修改 JSON 中指定字段 */
    public static String modifyNode(String json, String fieldName, Object newValue) {
        try {
            ObjectNode node = (ObjectNode) mapper.readTree(json);
            if (newValue instanceof String) {
                node.put(fieldName, (String) newValue);
            } else if (newValue instanceof Integer) {
                node.put(fieldName, (Integer) newValue);
            } else if (newValue instanceof Boolean) {
                node.put(fieldName, (Boolean) newValue);
            } else if (newValue instanceof Double) {
                node.put(fieldName, (Double) newValue);
            } else {
                node.putPOJO(fieldName, newValue);
            }
            return node.toString();
        } catch (JsonProcessingException e) {
            throw new RuntimeException("修改 JSON 節點失敗", e);
        }
    }
}

最佳實踐建議

  1. 單例模式:ObjectMapper 是線程安全的,應全局復用。
  2. 異常處理:工具類中統一封裝異常,避免業務代碼重復 try-catch。
  3. 統一日期:推薦使用 Java 8 的 LocalDateTime,避免 Date 的線程安全問題。
  4. 字段控制:通過注解和過濾器靈活控制 JSON 輸出。
  5. 性能優化:大數據量場景下可考慮 Jackson Streaming API (JsonParser / JsonGenerator)。

結語

掌握 Jackson 不僅僅是學會“對象和 JSON 的互轉”,而是要善用其豐富的生態與擴展能力。

通過本文的工具類與實戰案例,你可以:

  • 高效應對各種 JSON 場景
  • 統一團隊代碼風格
  • 顯著提升開發效率與代碼質量

Jackson 的功能遠不止于此,建議在實踐中結合官方文檔深入探索,例如多態序列化、自定義模塊、性能調優等,能讓你的 JSON 處理能力更上一層樓。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2019-07-12 15:28:41

緩存數據庫瀏覽器

2021-03-01 19:13:45

YAML程序員數據

2021-02-08 22:32:43

程序員 靜態網頁

2018-05-08 15:30:46

程序員代碼框架

2011-08-23 13:50:17

程序員

2022-08-08 11:13:35

API接口前端

2020-12-21 09:00:04

MySQL緩存SQL

2022-10-29 17:34:18

JVMJava

2018-09-20 17:05:01

前端程序員JavaScript

2021-02-23 07:10:54

Redis數據庫緩存

2020-12-21 09:44:53

MySQL查詢緩存數據庫

2013-11-21 13:35:19

程序員牛人

2020-07-29 09:53:09

VSCode編碼工具插件

2025-04-17 02:30:00

2010-10-19 15:31:44

Java

2017-04-21 08:18:14

Java程序員反射機制

2010-08-23 09:56:09

Java性能監控

2018-10-17 14:50:08

2021-11-12 10:05:19

跳表BAT面試

2024-10-22 09:03:35

前端signalAPI
點贊
收藏

51CTO技術棧公眾號

国产精品久久久久免费| 久久资源免费视频| 欧美激情精品久久久久久小说| 涩爱av在线播放一区二区| 久热精品在线| 精品国偷自产在线视频| 性猛交╳xxx乱大交| 偷拍自拍在线看| 中文字幕五月欧美| 精品视频免费观看| 91久久精品国产91性色69| 亚洲国产高清一区| 日韩视频精品在线| 国产男女猛烈无遮挡a片漫画| 国产精品xxx| 亚洲成人高清在线| 亚洲欧洲精品一区| 少妇精品视频一区二区 | 久久久久久久久久久网站| 亚洲欧美视频在线播放| 日本在线视频一区二区三区| 一本久道久久综合中文字幕 | 国产特级黄色录像| 亚洲精品一区二区三区在线| 欧美性三三影院| koreanbj精品视频一区| av在线free| 国产精品嫩草影院com| 久久精品99久久| 国产高潮在线观看| 久久精品国产一区二区| 欧美黑人性生活视频| 五月婷婷欧美激情| 台湾色综合娱乐中文网| 精品国产一区二区三区忘忧草 | 污污污污污污www网站免费| 91视频在线观看| 91社区在线播放| 操人视频欧美| 91一区二区视频| 奇米影视在线99精品| 日韩av手机在线| 青青草av在线播放| 亚洲免费激情| 国模视频一区二区三区| 神马午夜精品91| 国产精品久久久久久久| 中文字幕国产精品| 日韩毛片无码永久免费看| 婷婷综合福利| 亚洲免费视频一区二区| 中文字幕日韩三级片| 久久精品国产亚洲blacked| 欧美大片免费久久精品三p| 久久精品亚洲天堂| 日韩激情精品| 日韩欧美亚洲一区二区| 免费观看一区二区三区| 亚洲日本va| 欧美成人video| www.成年人| 亚洲欧美久久精品| 欧美一级一区二区| 在线观看一区二区三区四区| 一区二区在线视频观看| 精品国产精品一区二区夜夜嗨| av免费观看不卡| 狠狠一区二区三区| 亚洲免费视频在线观看| 免费福利视频网站| 色综合狠狠操| 久久99精品视频一区97| 国产精品1234区| 久久精品国语| 国产精品网站入口| 国产又黄又粗又长| 岛国精品在线观看| 欧美日韩一区综合| 日韩成人影视| 亚洲一区二区三区视频在线播放| 无罩大乳的熟妇正在播放| 精品国模一区二区三区| 在线电影院国产精品| 中文字幕制服丝袜| 婷婷成人影院| 日韩中文字幕在线视频播放| 黄色一级片在线| 羞羞答答国产精品www一本| 国产精品一区二区三区久久| 午夜精品久久久久久久96蜜桃| 99在线精品一区二区三区| 看高清中日韩色视频| 91伦理视频在线观看| 亚洲狠狠丁香婷婷综合久久久| 鲁一鲁一鲁一鲁一色| 激情久久一区二区| 精品国产欧美一区二区| 亚洲色图在线视频| 欧美孕妇与黑人孕交| 亚洲视频在线观看免费视频| 国产在线看片| 91tv精品福利国产在线观看| 欧美黑人xxx| av片免费观看| 国产99久久久久久免费看农村| 久久久久久久久四区三区| 欧美jizz18性欧美| 午夜激情一区二区| 日本中文字幕影院| 亚洲影院天堂中文av色| 美日韩精品免费视频| 视频一区二区三区四区五区| 国产精品一区在线观看你懂的| 欧美福利精品| 久久www人成免费看片中文| 色94色欧美sute亚洲线路二| 国产清纯白嫩初高中在线观看性色| 禁果av一区二区三区| 欧美激情第99页| 亚洲最大成人av| 久久亚洲精华国产精华液| 久久精品在线免费视频| 欧美成人福利| 亚洲精品视频免费| 国产精品.www| 国产成人av一区二区三区在线| 小说区图片区图片区另类灬| 在线看片国产福利你懂的| 欧美刺激脚交jootjob| 日本不卡一区视频| 久久精品首页| 欧美高清视频一区二区三区在线观看| 欧美人与禽性xxxxx杂性| 欧美人体做爰大胆视频| 懂色av粉嫩av浪潮av| 日韩国产在线一| 久久亚洲高清| 蜜桃视频在线观看免费视频| 欧美va亚洲va在线观看蝴蝶网| 欧美色图17p| 日本不卡视频在线| 欧美久久在线| 国产欧美一区二区三区精品酒店| 亚洲国产精品热久久| 日本三级网站在线观看| 成人性视频网站| 日韩av中文字幕第一页| 91精品久久久久久综合五月天| 久久国产天堂福利天堂| a级片在线免费看| 日韩欧美不卡| 色欧美日韩亚洲| 久久久久亚洲av无码专区桃色| 亚洲高清二区| 精品中文字幕一区| 色综合桃花网| 国产亚洲精品成人av久久ww| 亚洲精品一区二三区| 国产目拍亚洲精品99久久精品| 无码人妻丰满熟妇区毛片| 免费不卡中文字幕在线| 国产成人在线播放| 天堂地址在线www| 欧美另类变人与禽xxxxx| 色婷婷粉嫩av| 国产精品一区三区| 欧美人成在线观看| 日韩高清电影免费| 日韩美女免费线视频| 国产youjizz在线| 欧美日韩高清一区二区三区| xxxx日本少妇| 不卡一二三区首页| 国产一区二区三区精彩视频| 欧美一站二站| 91在线|亚洲| 草草视频在线| 亚洲一区二区国产| 国产又大又黄的视频| 亚洲一区二区三区四区不卡| 狠狠人妻久久久久久综合蜜桃| 亚洲欧美视频一区二区三区| 神马影院我不卡| 九九99久久精品在免费线bt| 韩国精品美女www爽爽爽视频| 三级av在线| 911国产精品| 日韩精品一区二区三区国语自制| 国产无人区一区二区三区| 亚洲一二三不卡| 国产日韩专区| 日本一级淫片演员| 欧美一区二区三区红桃小说| 国产欧美中文字幕| 草草影院在线| 色多多国产成人永久免费网站| 性生活视频软件| 色婷婷一区二区| 久久综合综合久久| 国产欧美在线观看一区| 最新中文字幕日本| 日韩精品五月天| av在线观看地址| 91亚洲一区| 久久综合入口| 91九色鹿精品国产综合久久香蕉| 99xxxx成人网| 亚洲aaa激情| 裤袜国产欧美精品一区| 美女性感视频久久久| 国内在线免费高清视频| 精品免费日韩av| 成人黄色片在线观看| 亚洲成人一区在线| 国产67194| 欧美经典一区二区| 色天使在线视频| 国产成人h网站| 日韩精品aaa| 蜜臀精品久久久久久蜜臀| 日韩精品xxxx| 亚洲一级高清| 男人日女人的bb| 青青草综合网| 欧美一二三四五区| 亚洲理论电影| 国产伦精品一区二区三区四区免费| 先锋影音网一区二区| 日本三级韩国三级久久| hd国产人妖ts另类视频| 欧美高清视频在线| 高清全集视频免费在线| 日韩中文字幕在线视频播放| 国产精品秘入口| 亚洲精品中文字| 神马电影在线观看| 亚洲成人久久久| 亚洲高清视频在线播放| 日韩一区二区视频| 国产乱淫av片免费| 欧美卡1卡2卡| 一二三四区在线| 欧美日韩国产综合久久| 亚洲一区二区影视| 欧美三级视频在线观看| 18国产免费视频| 欧美性三三影院| 在线免费观看av片| 欧美日韩激情一区| 国产美女精品视频国产| 制服丝袜中文字幕一区| 在线观看免费观看在线| 欧美日韩在线播| 一级黄色片免费| 7777精品伊人久久久大香线蕉超级流畅 | 国产福利免费视频| 91精品国产综合久久福利| 国产毛片毛片毛片毛片| 91麻豆精品国产综合久久久 | 成人国产精品一区二区免费麻豆 | 精品国产乱子伦一区二区| 国产传媒一区| 狼人精品一区二区三区在线| 久久久久久草| 国产亚洲一区二区三区不卡| 视频在线一区二区三区| 久久国产成人午夜av影院宅| 中文字幕综合在线观看| 重囗味另类老妇506070| www.亚洲视频.com| 亚洲欧美清纯在线制服| 精品少妇无遮挡毛片| 久久av资源站| 中文字幕18页| 久久亚洲精品国产精品紫薇| 欧美福利在线视频| 亚洲综合激情小说| 全部毛片永久免费看| 欧美中文字幕亚洲一区二区va在线| 中文字幕激情视频| 精品国产一区久久| 国产尤物视频在线| 欧美成人第一页| 免费一二一二在线视频| 国产精品你懂得| caoporn成人免费视频在线| 欧美精品在线一区| 66久久国产| 人妻有码中文字幕| 精品一区二区免费看| 丰满人妻一区二区三区免费视频棣| 久久免费视频色| 久久久久99精品成人片试看| 欧美日韩国产激情| 97国产精品久久久| 日韩av网站大全| 欧美成人高清在线| 7777kkkk成人观看| 成人日韩视频| 欧美日韩在线观看一区| 欧美啪啪一区| 精品久久久久久无码国产| 国产精品一级片在线观看| 美女脱光内衣内裤| 一区二区三区四区视频精品免费 | 韩国久久久久久| 99视频免费观看| 欧美激情偷拍自拍| av免费中文字幕| 成人一级片网址| 色哟哟一一国产精品| 黑人欧美xxxx| 国产成人涩涩涩视频在线观看| 免费污视频在线一区| 国产一区喷水| 一区二区电影| 黄色永久免费网站| 91麻豆免费看| 日韩av综合在线| 日韩精品一区二区三区老鸭窝| 在线观看美女网站大全免费| 3344国产精品免费看| 99久久人爽人人添人人澡| 一本久久a久久精品vr综合| 久久精选视频| 黄色正能量网站| 亚洲国产精品自拍| 国产99对白在线播放| 日韩一区二区福利| 欧美日韩五区| 欧美日韩国产不卡在线看| 亚洲精品欧美| 中文字幕一区二区三区人妻在线视频 | 亚洲精品视频大全| 亚洲一二三四区| 精品久久久免费视频| 美女少妇精品视频| 国产精品毛片无码| 性欧美18一19内谢| 九九精品视频在线看| 久久精品色妇熟妇丰满人妻| 欧美亚洲丝袜传媒另类| 免费人成在线观看网站| 日本韩国在线不卡| 中文字幕伦av一区二区邻居| 久色视频在线播放| 久久婷婷国产综合国色天香| 在线观看中文字幕视频| 日韩精品中文字| 欧美裸体视频| 日本精品免费| 奇米影视一区二区三区| 日韩一区二区三区四区视频| 欧美日韩免费一区二区三区 | 天堂在线视频观看| 欧美一区二三区| 国产尤物久久久| 久久99999| 亚洲日本在线看| 国产黄a三级三级三级| 欧美激情性做爰免费视频| 一区二区在线免费播放| 日韩a∨精品日韩在线观看| 91亚洲永久精品| 久久久蜜桃一区二区| 深夜福利一区二区| 欧美影院精品| 欧美 日韩 国产在线观看| 国产日韩精品一区| 国产精品欧美综合亚洲| 欧美高清第一页| 亚洲va久久| 粉色视频免费看| 亚洲品质自拍视频| 深夜福利视频在线免费观看| 国产精品免费在线免费| 欧美.www| 国精产品一区一区三区免费视频 | 不卡av免费在线观看| 欧美三级一区二区三区| 亚洲视频综合网| 色8久久久久| 人妻夜夜添夜夜无码av| 国产女人水真多18毛片18精品视频| 一区二区三区精彩视频| 国内精品视频久久| 成人精品天堂一区二区三区| 可以看的av网址| 91福利在线免费观看| 最近中文字幕免费mv2018在线| 狠狠爱一区二区三区| 蜜桃一区二区三区在线观看| 久久免费播放视频| 亚洲视频在线播放| 97超碰成人| 色片在线免费观看| 亚洲成av人片一区二区三区| yw在线观看| 国产一区二区三区av在线| 免费欧美在线视频|