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