Java对象深复制

摘要:
Json用于转换ListcpStageListOld=findCpStageByCpId(cpId);StringcpStageListJson=JsonUtils。toJson(cpStageListOld);List<CpStage>cpStageList=JsonUtils.fromJsonToList(cpStageListJson,CpStage.class);Jso公司

用的是Json转换

List<CpStage> cpStageListOld = findCpStageByCpId(cpId);
String cpStageListJson = JsonUtils.toJson(cpStageListOld);
List<CpStage> cpStageList = JsonUtils.fromJsonToList(cpStageListJson, CpStage.class);

JsonUtils.java

import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class JsonUtils {
    public static <T> T fromJson(String json, Class<T> clz) {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()));
        try {
            return objectMapper.readValue(json, clz);
        } catch (IOException e) {
            throw new RuntimeException("Failed to deserialize json: " + e.getMessage(), e);
        }
    }

    public static JsonNode fromJsonToNode(String json) {
        ObjectMapper mapper = new ObjectMapper();
        try {
            return mapper.readTree(json);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static <T> List<T> fromJsonToList(String json, Class<T> clz) {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()));
        try {
            JavaType javaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, clz);
            return objectMapper.readValue(json, javaType);
        } catch (IOException e) {
            throw new RuntimeException("Failed to deserialize json to List: " + e.getMessage(), e);
        }
    }

    public static String toJson(Object object){
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()));
        try {
            return objectMapper.writeValueAsString(object);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

免责声明:文章转载自《Java对象深复制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【uniapp 开发】如何给边框添加阴影效果nginx+tomcat负载均衡搭建下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

关于服务器并发量的简单计算

最简单的计算方式就是根据服务器带宽与页面的大小1.假设机房带宽为10Mbs,页面的大小为20KB同时并发量的理论值:10*1024/=64个请求/秒理论上1秒钟同时可以有64个请求访问页面。本考试系统,登陆的页面容量比较大,所有的js,css以及图片未优化前在400KB左右,我们就以400KB为基准,所有后面要用的文件是在首页一次性加载下来的。这一天的测评情...

【问题】如何批量导出AI文件里内嵌的图片

截止目前为止,新版的AI里面没有直接可以批量导出内嵌图片的选项,手动一个个导出实在太麻烦了。有人说用Phantasm插件可以导出,但新版的找不到对应支持的插件版本,所以这里就不说了。这里介绍一种简单粗暴的方法。...

利用油猴插件实现全网VIP视频免费看

利用油猴插件实现全网VIP视频免费看第一步:首先打开谷歌应用商店搜索tampermonkey安装这个插件第二步:在百度搜索框搜索油猴可以看到以下页面,点击进入。下载谷歌上网助手解压后,将后缀为crx的文件拖入即可。之后注册一个谷歌上网助手账后登录即可进入谷歌应用商店油猴插件...

5G中的频点计算及实例分析

相关图表:关于∏SSB的频域位置SSREF和GSCN之间的关系,请参见下表:注:SCSspacedchannelrasterisM=3的工作频带的默认值。同步网格是5G的第一个概念,旨在加快终端扫描SSB的频率位置。GSCN通常用于在SA联网模式下加速时频同步,以继续解释MIB和SIB1消息;对于NSA来说,这是不必要的。RRC重配置消息已经携带了NR的SS...

mysql 视图

如果更新的值不在视图范围内,则不允许更新。如果创建视图时未使用withcheck选项,则MySQL在更新视图中的某些数据时不会执行有效性检查。对于上面的团队视图,MySQL将使用视图的公式来替换它,视图公式将合并到select中。也就是说,它最终被提交给MySQL来处理SQL语句。具体来说,MySQL首先获得视图执行结果,该结果形成中间结果,并临时存储在内存...

使用vue-print-nb插件页面空白以及打印没有样式问题

在使用vue-print-nb中遇到两个问题:第一个问题:点击打印后,打印的内容是一片空白vue-print-nb的原理大概是在你的页面上创建一个iframe,然后把你要打印的那一个div抓出来给iframe。为了方便调试,我把vue-print-nb的代码复制到项目中,这样可以方便调试。当我直接在浏览器调试窗口上输入如下命令时:打印内容是正常显示的:但,为...