packagecom.jsoft.springboottest.springboottest1.controller;importjava.io.IOException;importjava.lang.reflect.Type;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importcom.fasterxml.jackson.core.type.TypeReference;importcom.fasterxml.jackson.databind.JavaType;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.jsoft.springboottest.springboottest1.Pager;importcom.jsoft.springboottest.springboottest1.PagerAppoint;importcom.jsoft.springboottest.springboottest1.User;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importsun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
@RestControllerpublic classTestController {private static final Logger logger = LoggerFactory.getLogger(TestController.class);
@RequestMapping("/show")public String show() throwsIOException {
ObjectMapper mapper= newObjectMapper();
User user= newUser();
user.setId(1);
Pager pager = new Pager();
List users = new ArrayList();
users.add(user);
pager.setDatas(users);
String json=mapper.writeValueAsString(pager);//方式1
Pager userPager1 = mapper.readValue(json, new TypeReference>() {
});//方式2
Type[] types = new Type[1];
types[0] = User.class;final ParameterizedTypeImpl type = ParameterizedTypeImpl.make(Pager.class, types, Pager.class.getDeclaringClass());
TypeReference typeReference= new TypeReference() {
@OverridepublicType getType() {returntype;
}
};
Pager userPager2 =mapper.readValue(json, typeReference);//方式3
JavaType javaType = mapper.getTypeFactory().constructParametrizedType(Pager.class, Pager.class, User.class);
Pager userPager3 =mapper.readValue(json, javaType);//方式4
JavaType javaType1 = mapper.getTypeFactory().constructParametricType(Pager.class, User.class);
Pager userPager4 =mapper.readValue(json, javaType1);//方式5,新建另一个指定具体泛型T的参数的类
PagerAppoint userPager5 = mapper.readValue(json, PagerAppoint.class);//数组泛型的序列化和反序列化
String json1 =mapper.writeValueAsString(users);
JavaType javaType2= mapper.getTypeFactory().constructParametricType(List.class, User.class);
List users1 =mapper.readValue(json1, javaType2);//HashMap
Map map = new HashMap(16);
map.put("test", user);
String json2=mapper.writeValueAsString(map);//1
Map users2 = mapper.readValue(json2, new TypeReference>() {
});//2
JavaType javaType3 = mapper.getTypeFactory().constructParametricType(HashMap.class, String.class, User.class);
Map users3 =mapper.readValue(json2, javaType3);return "hello world";
}
}