【jackson】Jackson 封装工具类
作者:互联网
1.pom.xml文件
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.9.3</version> </dependency>
2.核心类ObjectMapper注册为单例的Bean
import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class UtilConfig { /** * 单例对象映射器 * ObjectMapper 将jackson的这个核心类注册为单例的Bean,防止在每一次序列化和反序列化时 new新的对象 * @return {@link ObjectMapper} */ @Bean public ObjectMapper singletonObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.findAndRegisterModules();//可解决时间格式等一系列问题 return objectMapper; } }
3.JacksonUtil工具类
import cn.hutool.extra.spring.SpringUtil; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.StringUtils; import java.util.Collections; import java.util.List; import java.util.Map; /** * 杰克逊跑龙套 * 1.序列化类上,使用 @JsonInclude(JsonInclude.Include.NON_NULL) 序列化忽略所有null字段 * 2.时间字段上,使用 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 保持格式统一 * 3.序列化类上,必须提供无参构造方法!! * 4.待续...... * * @author xudong.shen * @date 2022/05/06 */ public class JacksonUtil { /** * 序列化为JSON字符串 * * @param obj obj * @return {@link String} */ public static String toJsonString(Object obj) { if (obj == null) return null; ObjectMapper mapper = SpringUtil.getBean(ObjectMapper.class); String result = null; try { result = mapper.writeValueAsString(obj); } catch (JsonProcessingException e) { e.printStackTrace(); } return result; } /** * 解析对象 * 反序列化为Object * * @param clazz clazz * @param jsonStr json str * @return {@link T} */ public static <T> T parseObject(String jsonStr, Class<T> clazz) { if (StringUtils.isBlank(jsonStr) || clazz == null) return null; ObjectMapper mapper = SpringUtil.getBean(ObjectMapper.class); T t = null; try { t = mapper.readValue(jsonStr, clazz); } catch (JsonProcessingException e) { e.printStackTrace(); } return t; } /** * 解析List * 反序列化为List集合 * * @param clazz clazz * @param listJsonStr 列表json str * @return {@link List}<{@link T}> */ public static <T> List<T> parseList(String listJsonStr, Class<T> clazz) { if (StringUtils.isBlank(listJsonStr) || clazz == null) return Collections.emptyList(); ObjectMapper mapper = SpringUtil.getBean(ObjectMapper.class); List<T> list = Collections.emptyList(); try { list = mapper.readValue(listJsonStr, List.class); } catch (JsonProcessingException e) { e.printStackTrace(); } return list; } /** * 解析Map * 反序列化为Map集合 * @param mapJsonStr 地图json str * @param kClazz k clazz * @param vClazz v clazz * @return {@link Map}<{@link K}, {@link V}> */ public static <K,V> Map<K,V> parseMap(String mapJsonStr, Class<K> kClazz, Class<V> vClazz) { if (StringUtils.isBlank(mapJsonStr) || kClazz == null || vClazz == null) return Collections.emptyMap(); ObjectMapper mapper = SpringUtil.getBean(ObjectMapper.class); Map<K,V> map = Collections.EMPTY_MAP; try { map = mapper.readValue(mapJsonStr, mapper.getTypeFactory().constructParametricType(Map.class, kClazz, vClazz)); } catch (JsonProcessingException e) { e.printStackTrace(); } return map; } }
4.举例子,如下这种复杂对象,都可以完成转化
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import java.time.LocalDateTime; import java.util.List; import java.util.Map; @JsonInclude(JsonInclude.Include.NON_NULL) @Data public class Student { private Integer id; private String name; private Long age; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime time; private Map<String,List<Student>> map; }
一个完整的JSON示例字符串:
{"1":{"id":1,"name":"德玛西亚","time":"2022-05-06 17:53:01","map":{"第2组":[{"id":21,"name":"德玛西亚21","time":"2022-05-06 17:53:01"},{"id":22,"name":"德玛西亚22","time":"2022-05-06 17:53:01"},{"id":23,"name":"德玛西亚23","time":"2022-05-06 17:53:01"}],"第1组":[{"id":11,"name":"德玛西亚11","time":"2022-05-06 17:53:01"},{"id":12,"name":"德玛西亚12","time":"2022-05-06 17:53:01"},{"id":13,"name":"德玛西亚13","time":"2022-05-06 17:53:01"}]}},"2":{"id":2,"name":"德玛西亚","time":"2022-05-06 17:53:01","map":{"第2组":[{"id":21,"name":"德玛西亚21","time":"2022-05-06 17:53:01"},{"id":22,"name":"德玛西亚22","time":"2022-05-06 17:53:01"},{"id":23,"name":"德玛西亚23","time":"2022-05-06 17:53:01"}],"第1组":[{"id":11,"name":"德玛西亚11","time":"2022-05-06 17:53:01"},{"id":12,"name":"德玛西亚12","time":"2022-05-06 17:53:01"},{"id":13,"name":"德玛西亚13","time":"2022-05-06 17:53:01"}]}}}
标签:jackson,name,import,封装,2022,time,Jackson,ObjectMapper 来源: https://www.cnblogs.com/sxdcgaq8080/p/16229809.html