【Springboot】Json轉換工具
阿新 • • 發佈:2018-12-16
HttpClient請求資料後是json字串,需要我們自己把Json字串反序列化為物件,我們會使用JacksonJson工具來實現。
JacksonJson是SpringMVC內建的json處理工具,其中有一個ObjectMapper類,可以方便的實現對json的處理:
1.物件轉json
import com.fasterxml.jackson.databind.ObjectMapper;
import com.leyou.httpdemo.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.IOException;
@RunWith(SpringRunner.class)
@SpringBootTest
public class JacksonJsonTests {
// json處理工具
private ObjectMapper mapper = new ObjectMapper();
@Test
public void tetsJson() throws IOException{
User user = new User();
user.setId(3L);
user.setAge(23);
user.setName("小明");
user.setUserName("xiaoming");
//序列化
String json = mapper.writeValueAsString(user);
System.out.println("json = " + json);
}
}
結果:
2.json轉普通物件
// json處理工具
private ObjectMapper mapper = new ObjectMapper();
@Test
public void tetsJsonToObject() throws IOException{
User user = new User();
user.setId(3L);
user.setAge(23);
user.setName("小明");
user.setUserName("xiaoming");
//序列化
String json = mapper.writeValueAsString(user);
System.out.println("json = " + json);
// 反序列化
final User result = mapper.readValue(json, User.class);
System.out.println("result = " + result);
}
結果:
3.json轉集合
json轉集合比較麻煩,因為你無法同時把集合的class和元素的class同時傳遞到一個引數。
因此Jackson做了一個型別工廠,用來解決這個問題:
// json處理工具
private ObjectMapper mapper = new ObjectMapper();
@Test
public void tetsJsonToList() throws IOException{
User user = new User();
user.setId(3L);
user.setAge(23);
user.setName("小明");
user.setUserName("xiaoming");
//序列化得到物件集合的字串
String json = mapper.writeValueAsString(Arrays.asList(user, user));
// 反序列化
List<User> users = mapper.readValue(json, mapper.getTypeFactory().constructCollectionType(List.class, User.class));
for (User u : users){
System.out.println("u = " + u);
}
}
結果:
3.json轉任意複雜型別
當物件泛型關係複雜時,型別工廠也不好使了。這個時候Jackson提供了TypeReference來接收型別泛型,然後底層通過反射來獲取泛型上的具體型別。實現資料轉換。
@Test
public void tetsJsonToList() throws IOException{
User user = new User();
user.setId(3L);
user.setAge(23);
user.setName("小明");
user.setUserName("xiaoming");
//序列化得到物件集合的字串
String json = mapper.writeValueAsString(Arrays.asList(user, user));
// 反序列化,接收兩個引數:json資料,反序列化的目標類位元組碼
List<User> users = mapper.readValue(json, new TypeReference<List<User>>(){});
for (User u : users){
System.out.println("u = " + u);
}
}
結果: