1,当今的互联网开发行业,JSON 这种数据格式越来越成为网络开发的主流,尤其是前后端分离之后,几乎百分百的数据交互方式都是采用 JSON

2,由于 SpringMVC 框架的封装性,我们日常开发中只需要在 控制器 加上 @ResponseBody 注解,那么该类中方法返回的值就会自动转化为 JSON 格式响应给请求方,这让我们省去可很多麻烦

3,但是如果我们在程序中需要自己转化应该怎么操作呢,SpringBoot 内置了一个 ObjectMapper 的类,我们可以直接注入使用

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);
    }

}

 

posted on 2019-03-14 17:56  被遗忘的优雅  阅读(1499)  评论(0编辑  收藏  举报