ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【jackson】Jackson 封装工具类

2022-05-06 18:00:50  阅读:197  来源: 互联网

标签:jackson name import 封装 2022 time Jackson ObjectMapper


 

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有