java jackson 泛型_Jackson对泛型的序列化和反序列化方法汇总

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";

}

}


版权声明:本文为weixin_36104309原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。