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