JAVA SpringBoot2 關於 JSON 數據處理,基於 ObjectMapper

1,當今的互聯網開發行業,JSON 這種數據格式愈來愈成爲網絡開發的主流,尤爲是先後端分離以後,幾乎百分百的數據交互方式都是採用 JSONjava

2,因爲 SpringMVC 框架的封裝性,咱們平常開發中只須要在 控制器 加上 @ResponseBody 註解,那麼該類中方法返回的值就會自動轉化爲 JSON 格式響應給請求方,這讓咱們省去可不少麻煩spring

3,可是若是咱們在程序中須要本身轉化應該怎麼操做呢,SpringBoot 內置了一個 ObjectMapper 的類,咱們能夠直接注入使用json

4,使用方式以下,首先聲明一個實體類 User,使用 lombok 庫後端

package com.hwq.collection.model;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class User {
    private Integer id;
    private String name;
    private Integer sex;
}

 

5,經常使用的兩種轉化方式網絡

package com.hwq.collection;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hwq.collection.model.User;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class CollectionApplicationTests {

    /**
     * 注入 JSON 的操做類
     */
    @Autowired
    ObjectMapper jsonMapper;

    private String jsonStr;

    /**
     * 將數據轉化爲 JSON 字符串,這個很簡單
     */
    @Before
    public void before() throws IOException {
        List<User> userList = new LinkedList<User>();
        for (int i = 1; i <= 20; i++) {
            User user = new User();
            user.setId(1);
            user.setName("張" + i);
            user.setSex(i % 2);
            userList.add(user);
        }
        jsonStr = jsonMapper.writeValueAsString(userList);
        // System.out.println(jsonStr);
    }

    /**
     * 將 JSON 字符串映射成對應的 類 集合
     * 注意:轉化爲類時,方法的第二個參數直接寫 類.calss 便可
     *      可是若是是轉化爲 List 集合,方法的第二個參數須要用 TypeReference 類
     */
    @Test
    public void contextLoads() throws IOException{
        List<User> userList1 = jsonMapper.readValue(jsonStr, new TypeReference<List<User>>() {});
        System.out.println(userList1.get(0).getClass());   // User
        System.out.println(userList1.get(0).getId());      // 1
        // System.out.println(userList1);
    }


    /**
     * 固然,若是咱們只知道 JSON 字符串要轉化爲 List 集合,可是並不知道 List 內元素的具體類型
     * 或者返回的類型是參吃不齊的數據,這時方法的第二個參數我能夠直接寫 List.class
     * 這樣返回的就是一個 LinkedHashMap 集合數據,這種方式更加靈活
     */
    @After
    public void after() throws IOException {
        List<LinkedHashMap> userList2 = jsonMapper.readValue(jsonStr, List.class);
        System.out.println(userList2.get(0).getClass());   // LinkedHashMap
        System.out.println(userList2.get(0).get("id"));    // 1
        // System.out.println(userList2);
    }

}
相關文章
相關標籤/搜索