成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ObjectMapper:Java 數(shù)據(jù)處理利器

開發(fā) 前端
ObjectMapper?是?Jackson?庫中用于將?Java?對象轉(zhuǎn)換為?JSON?格式(序列化),以及將?JSON?格式轉(zhuǎn)換回?Java?對象(反序列化)的核心類。它提供了一系列方法,支持多種數(shù)據(jù)格式的讀寫,包括?JSON、XML、YAML?等,不過最常用的還是?JSON?處理。

前言

無論是前后端數(shù)據(jù)交互,還是數(shù)據(jù)持久化,都離不開這一過程。ObjectMapper 作為 Jackson 庫的核心類,憑借其強(qiáng)大且靈活的功能,成為了 Java 開發(fā)者處理 JSON 數(shù)據(jù)的得力助手。

基礎(chǔ)概念

ObjectMapper 是 Jackson 庫中用于將 Java 對象轉(zhuǎn)換為 JSON 格式(序列化),以及將 JSON 格式轉(zhuǎn)換回 Java 對象(反序列化)的核心類。它提供了一系列方法,支持多種數(shù)據(jù)格式的讀寫,包括 JSON、XML、YAML 等,不過最常用的還是 JSON 處理。通過 ObjectMapper,開發(fā)者可以輕松實(shí)現(xiàn)對象與 JSON 字符串之間的雙向轉(zhuǎn)換,極大地簡化了數(shù)據(jù)處理流程。

基本使用

序列化:Java 對象轉(zhuǎn) JSON

public class SerializationExample {
    public static void main(String[] args) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            User user = new User();
            user.setName("Alice");
            user.setAge(25);
            String json = objectMapper.writeValueAsString(user);
            System.out.println(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

反序列化:JSON 轉(zhuǎn) Java 對象

public class DeserializationExample {
    public static void main(String[] args) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            String json = "{\"name\":\"Bob\",\"age\":30}";
            User user = objectMapper.readValue(json, User.class);
            System.out.println("Name: " + user.getName() + ", Age: " + user.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

高級特性

通常默認(rèn)的序列化和反序列化方式不能滿足需求,這時可以自定義序列化和反序列化邏輯。Jackson 提供了JsonSerializer和JsonDeserializer接口來實(shí)現(xiàn)這一功能。

自定義序列化和反序列化

public class CustomAgeSerializer extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeString("Age: " + value);
    }
}

反序列化的自定義方式類似,通過實(shí)現(xiàn)JsonDeserializer接口并使用@JsonDeserialize注解來指定。

忽略屬性

public class User {
    private String name;
    @JsonIgnore
    private int age;

    // 省略getter和setter方法
}

此外,還可以通過ObjectMapper的setSerializationInclusion方法來設(shè)置全局的屬性包含策略,例如只序列化非空屬性:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

性能優(yōu)化

由于創(chuàng)建ObjectMapper實(shí)例的開銷較大,特別是在頻繁進(jìn)行序列化和反序列化操作的場景下,應(yīng)該盡量重用ObjectMapper實(shí)例。可以將ObjectMapper實(shí)例定義為單例模式,或者在應(yīng)用啟動時創(chuàng)建一個全局的ObjectMapper實(shí)例供各處使用。

public class JsonUtils {

    private static final ObjectMapper OBJECT_MAPPER;

    static {
        OBJECT_MAPPER = new ObjectMapper();
        // 配置:遇到未知屬性不拋出異常
        OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        // 配置:日期時間格式使用ISO標(biāo)準(zhǔn)格式
        OBJECT_MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        // 注冊Java 8日期時間模塊
        OBJECT_MAPPER.registerModule(new JavaTimeModule());
    }

    /**
     * 將Java對象轉(zhuǎn)換為JSON字符串
     *
     * @param object 待轉(zhuǎn)換的Java對象
     * @return JSON字符串
     */
    public static String toJsonString(Object object) {
        try {
            return OBJECT_MAPPER.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("序列化對象為JSON字符串失敗", e);
        }
    }

    /**
     * 將JSON字符串轉(zhuǎn)換為指定類型的Java對象
     *
     * @param json  JSON字符串
     * @param clazz 目標(biāo)Java類
     * @param <T>   目標(biāo)Java類的類型參數(shù)
     * @return 轉(zhuǎn)換后的Java對象
     */
    public static <T> T fromJsonString(String json, Class<T> clazz) {
        try {
            return OBJECT_MAPPER.readValue(json, clazz);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("反序列化JSON字符串為Java對象失敗", e);
        }
    }
}
責(zé)任編輯:武曉燕 來源: 一安未來
相關(guān)推薦

2024-06-19 21:12:02

2013-12-27 16:15:11

Hadoop大數(shù)據(jù)處理

2013-12-30 10:40:12

大數(shù)據(jù)處理大數(shù)據(jù)Hadoop

2023-12-05 08:47:30

Pandas數(shù)據(jù)處理

2023-11-29 13:56:00

數(shù)據(jù)技巧

2024-01-31 23:22:35

vaexPython

2018-12-07 14:50:35

大數(shù)據(jù)數(shù)據(jù)采集數(shù)據(jù)庫

2020-11-02 15:56:04

大數(shù)據(jù)數(shù)據(jù)庫技術(shù)

2023-08-02 08:47:55

聚合框架MongoDB

2017-07-21 14:22:17

大數(shù)據(jù)大數(shù)據(jù)平臺數(shù)據(jù)處理

2021-07-20 15:37:37

數(shù)據(jù)開發(fā)大數(shù)據(jù)Spark

2013-12-16 17:17:01

OpenMp數(shù)據(jù)處理

2023-07-31 08:21:22

語法校對器Pick

2015-12-10 21:31:19

七牛數(shù)據(jù)處理架構(gòu)變遷

2025-04-22 04:00:00

2021-12-29 10:51:19

JavaSPL架構(gòu)

2010-03-16 18:24:44

Java線程模型

2016-12-13 11:48:05

數(shù)據(jù)處理不平衡數(shù)據(jù)

2012-06-26 10:03:06

海量數(shù)據(jù)處理

2025-01-07 13:58:08

SQL數(shù)據(jù)處理函數(shù)數(shù)據(jù)庫
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 成人在线免费网站 | 精品日韩电影 | 亚洲午夜精品在线观看 | 亚洲综合一区二区三区 | 国产一区二区三区久久久久久久久 | 国产精品影视在线观看 | 99re在线视频 | 久久日韩粉嫩一区二区三区 | 国产精品免费av | 成人在线一区二区 | 国产视频中文字幕 | 精品美女久久久久久免费 | 免费黄色a级毛片 | 久久久久久国产免费视网址 | 日韩欧美亚洲 | 在线观看中文字幕视频 | 日日日干干干 | 中文字幕日韩欧美一区二区三区 | 日韩欧美三级 | 国产三级大片 | 欧美日韩综合精品 | 精品入口麻豆88视频 | 精品福利一区二区三区 | 成人深夜福利在线观看 | 成人免费av | 成人深夜小视频 | 波多野结衣一二三区 | 成年无码av片在线 | 在线观看国产三级 | 一级黄色播放 | 黄a网站| 麻豆国产一区二区三区四区 | 东方伊人免费在线观看 | 国产原创在线观看 | 三区四区在线观看 | 国产精品毛片av一区 | 中文字幕高清av | 亚洲国产小视频 | 午夜激情免费视频 | 久久久久高清 | 久久久国产一区二区三区 |