JacksonUtil--序列化与反序列化

目录

1.创建jacksontutil工具类并私有化其构造方法

2.将ObjectMapper单例化

3.简化对异常捕获

4.对常用方法进行封装

小疑问


1.创建jacksontutil工具类并私有化其构造方法

对于封装的工具类,我们不需要创建其实例对象,我们一般都直接使用其静态方法即可,所以我们将其构造函数进行私有化。

java 复制代码
public class JacksonUtil {
    private JacksonUtil() {

    }

2.将ObjectMapper单例化

java 复制代码
    /**
     * 单例
     */
    private final static ObjectMapper OBJECT_MAPPER;

    static {
        OBJECT_MAPPER = new ObjectMapper();
    }

    private static ObjectMapper getObjectMapper() {
        return OBJECT_MAPPER;
    }

3.简化对异常捕获

由于在使用ObjectMapper中的方法的时候,会抛出异常,如果我们手动的try-catch会十分的麻烦,所以我们借鉴java内部对异常的简化。

java 复制代码
    private static  <T> T tryParse(Callable<T> parser) {
        return tryParse(parser, JacksonException.class);
    }

    private static  <T> T tryParse(Callable<T> parser, Class<? extends Exception> check) {
        try {
            return parser.call();
        } catch (Exception var4) {
            if (check.isAssignableFrom(var4.getClass())) {
                throw new JsonParseException(var4);
            }
            throw new IllegalStateException(var4);
        }
    }

4.对常用方法进行封装

java 复制代码
/**
     * 序列化方法
     *
     * @param object
     * @return
     */
    public static String writeValueAsString(Object object) {
        return JacksonUtil.tryParse(() -> {
            return JacksonUtil.getObjectMapper().writeValueAsString(object);
        });
    }

    /**
     * 反序列化
     *
     * @param content
     * @param valueType
     * @return
     * @param <T>
     */
    public static <T> T readValue(String content, Class<T> valueType) {
        return JacksonUtil.tryParse(() -> {
            return JacksonUtil.getObjectMapper().readValue(content, valueType);
        });

    }

    /**
     * 反序列化 List
     *
     * @param content
     * @param paramClasses
     * @return
     * @param <T>
     */
    public static <T> T readListValue(String content, Class<?> paramClasses) {
        JavaType javaType = JacksonUtil.getObjectMapper().getTypeFactory()
                .constructParametricType(List.class, paramClasses);
        return JacksonUtil.tryParse(() -> {
            return JacksonUtil.getObjectMapper().readValue(content, javaType);
        });
    }

}

小疑问

public static String writeValueAsString(Object object) {

return JacksonUtil.tryParse(() -> {

return JacksonUtil.getObjectMapper().writeValueAsString(object);

});

writeValueAsString再次调用不是循环了吗

弄 !!!

相关推荐
减瓦1 小时前
源码视图技术:集 APT 和 AST 所长
java·project lombok
love530love1 小时前
【排障实录】GPT Desktop (Codex) 开启 WSL 智能体模式后无法启动?手把手教你修复
人工智能·windows·gpt·agent
WangWei_CM1 小时前
Session Manager 的 BootExecute、SetupExecute 与 Execute 多字符串解析
windows
小刘学技术1 小时前
AI人工智能中的类别不平衡问题:成因、影响与解决方案
开发语言·人工智能·python·机器学习
兰令水1 小时前
hot100【acm版】【2026.7.21打卡-java版本】
java·开发语言·算法·leetcode·面试
IT_Octopus1 小时前
一次由 RestTemplate 引发的 Connection reset:被 XML 截胡的请求体
xml·java·spring boot
云烟成雨TD1 小时前
Micrometer 系列【2】可观测性:指标(Metrics)
java·云原生·micrometer
2501_914245931 小时前
Java应用性能调优与生产监控部署:2026年实战手册
java·开发语言
吴声子夜歌1 小时前
MongoDB 4.x——微服务入门
java·mongodb·微服务