SpringBoot - 使用 ObjectMapper 完成 json 和 Java Object 互相轉換

古古

2020/06/12


ObjectMapper 是一款非常好用的 json 轉換工具,可以幫助我們完成 json 和 Java 的 Object 的互相轉換

什麼是 Serialize 和 Deserialize? #

  • Serialize : 將 Java Object 轉換成 json
  • Deserialize : 將 json 轉換成 Java Object

在 Spring Boot 裡使用 ObjectMapper #

ObjectMapper 是由 Jackson library 所提供的一個功能,所以只要在 maven 中加入 spring-boot-starter-web 的 dependency 就可以了

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Json 和 Java Object、List、Map 的互轉 #

先定義一個 User class

public class User {
    private int id;
    private String name;
    // 省略constructor, getter, setter
}

使用 ObjectMapper 完成 json 和 Java Object、List、Map 之間的互轉

import java.util.*;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

public class MainTest {
    public static void main(String[] args) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();

        // User Object 轉 json
        User user1 = new User(123, "John");
        String json = objectMapper.writeValueAsString(user1);

        // json 轉 User Object
        User user2 = objectMapper.readValue(json, User.class);

        // List<User> 轉 json
        List<User> ulist = new ArrayList<>();
        User user4 = new User(123, "John");
        ulist.add(user4);
        String ujson = objectMapper.writeValueAsString(ulist);

        // json 轉 List<User>
        List<User> urlist = objectMapper.readValue(ujson, new TypeReference<List<User>>() {});
        
        // Map<String, User> 轉 json
        HashMap<String, User> umap = new HashMap<>();
        User user3 = new User(123, "John");
        umap.put("John", user3);
        String mjson2 = objectMapper.writeValueAsString(umap);

        // json 轉 Map<String, User>
        Map<String, User> urMap = objectMapper.readValue(mjson2, new TypeReference<HashMap<String, User>>() {});
    }
}

如果想了解更多 Spring Boot 的用法,也歡迎參考我開設的線上課程 「Java 工程師必備!Spring Boot 零基礎入門」 (輸入折扣碼「HH202501KU」即可享 85 折優惠)

免費訂閱《古古的後端筆記》電子報

每週二學習後端技術,和 2700 人一起變強💪