• 【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"}]}}}

     

  • 相关阅读:
    设计一个圆柱体类,计算表面积及体积。建立一个半径为3、高为3.5的圆柱体,输出其表面积及体积
    写一个方法完成如下功能,判断从文本框textbox1输入的一个字符,如果是数字则求该数字的阶乘,如果是小写字条,则转换为大写,大写字符不变,结果在文本框textbox2中显示
    写一方法用来计算1+2+3+...n,其中n作为参数输入,返回值可以由方法名返回,也可以由参数返回
    winform控件记录
    写4个同名方法,实现两个整数、两个实数,一个实数一个整数,一个整数一个实数之间的求和。在主调函数中调用这4个方法计算相关的值。(方法的重载)
    写一方法计算实现任意个整数之和.在主调函数中调用该函数,实现任意个数之和。(使用params参数)
    在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)
    Linux下使用Kickstart自动化安装平台架构
    Day10 多线程理论 开启线程
    关闭ipv6的方法
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/16229809.html
Copyright © 2020-2023  润新知