如果简单对象,那么转换的方式比较多,这里指的复杂对象,是指对象里面存在cycle引用,比如:

/**
* @author ding
*
*/
@Entity
@Table(name = "service")
public class ServicePO implements Serializable{

private static final long serialVersionUID = -6546556665143282079L;

@Id
@Column(name="service_pk")
@GeneratedValue(generator = "mcid")
@GenericGenerator(name="mcid",strategy="uuid2")
private String pk;

//包含的API
@JsonManagedReference(value="service-api")
@OneToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH,CascadeType.REMOVE}, mappedBy = "servicePO", orphanRemoval = true)
private List<ApiPO> apiPOs;

......

//此处略去其他属性

}

/**
* @author ding
*/
@Entity
@Table(name = "link_api_info")
public class ApiPO implements Serializable{

private static final long serialVersionUID = 7083439085753069767L;
@Id
@Column(name="api_pk")
@GeneratedValue(generator = "mcid")
@GenericGenerator(name="mcid",strategy="uuid2")
private String pk;

//服务
@ManyToOne(cascade = CascadeType.REFRESH)
@JsonBackReference(value="service-api")
@JoinColumn(name = "service_pk")
private ServicePO servicePO;
......

//此处略去其他属性

}

ServicePO 一对多ApiPO ,两个对象互相引用,虽然有json注解,但是一般的手动json转换不管用,下面就是解决方案~~

首先引入依赖:

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider -->
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.8.0</version>
</dependency>

object转换为json:

JsonGenerator jsonGenerator = null;
ObjectMapper objectMapper = null;
String dd1 = "";
try (ByteArrayOutputStream byt = new ByteArrayOutputStream();){
objectMapper = new ObjectMapper();
jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(byt, JsonEncoding.UTF8);
jsonGenerator.useDefaultPrettyPrinter();
objectMapper.writeValue(jsonGenerator, servicePO);
byt.flush();
dd1 = new String(byt.toByteArray(), "utf-8");
} catch (IOException e) {
logger.info("servicePO对象转json失败:"+e.getMessage());
}
JSONObject dd = JSONObject.fromObject(dd1);

jsonToObject:

String service = serPoJson;

if(service != null && !"".equals(service)){
try {
ObjectMapper objectMapper = new ObjectMapper();
servicePO = objectMapper.readValue(service, ServicePO.class);
} catch (IOException e) {
}
}

利用jackson-databind,复杂对象对象和json数据互转的更多相关文章

  1. Jackson 对象与json数据互转工具类JacksonUtil

    1,User对象 package com.st.json; import java.util.Date; /** * @Description: JSON序列化和反序列化使用的User类 * @aut ...

  2. 如何将java对象转换成json数据

    package cn.hopetesting.com.test;import cn.hopetesting.com.domain.User;import com.fasterxml.jackson.c ...

  3. 后台对象转化成json数据返回给前端

    一.介绍 JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json数据 二.下载jar依赖包:可以去这里下 ...

  4. ObjC 利用反射和KVC实现嵌套对象序列化成JSON数据

    原理: 0.创建一个新的可变字典:NSMutableDictionary 1.采用class_copyPropertyList函数遍历对象的属性 2.property_getName获取属性名,val ...

  5. 利用es6解构赋值快速提取JSON数据;

    直接上代码 { let JSONData = { title:'abc', test:[ { nums:5, name:'jobs' }, { nums:11, name:'bill' } ] } l ...

  6. JSON — Java与JSON数据互转

    转换时Bean所要求的: 被转换的Bean必需是public的. Bean被转换的属性一定要有对应的get方法,且一定要是public的. Bean中不能用引用自身的this的属性,否则运行时出现et ...

  7. Spring学习---Spring中利用jackson进行JSON转换

    Spring中利用jackson进行JSON转换 import java.util.List; import com.fasterxml.jackson.core.JsonProcessingExce ...

  8. 让复杂Json数据和对象自由转换 --- Gson

    Gson是谷歌用于对Json操作的库,里面有着强大而又方便的功能,最常用的就是 fromJson():将json数据转化为对象: toJson():将对象转化为json数据! 对于普通的json数据使 ...

  9. js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)

    js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...

随机推荐

  1. Troubleshooting OpenStack 瘫痪 - 每天5分钟玩转 OpenStack(160)

    这是 OpenStack 实施经验分享系列的第 10 篇.是软件就会有 bug,OpenStack 也不例外,只要用它就一定会遇到故障.Troubleshooting(故障排除)是运维 OpenSta ...

  2. TypeScript设计模式之工厂

    看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到用哪个模式可以解决,UML忘了可以查,思想 ...

  3. Bat小试牛刀

    前天版本发布后同事才发现有点小瑕疵,当然这是前期的设计和测试没到位造成的.撇开这些不说,我想说的是知识面广一点,做起事情来可能更得心应手些. 大致是这样的,由于版本的迭代,导致发布的程序只能清除一部分 ...

  4. Pascal's Triangle II leetcode

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  5. Asp.net MVC 视图使用像Ajax,ViewBag提示为找到上下文

    不知是什么原因,所有的视图中Ajax,ViewBag之类的都提示为找到上下文(由于换了个版本Vs,猜测应该是Vs的原因),然后顺利在网上找到了解决方案. 给地址链接:https://social.ms ...

  6. 3390: [Usaco2004 Dec]Bad Cowtractors牛的报复

    3390: [Usaco2004 Dec]Bad Cowtractors牛的报复 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 69  Solved:  ...

  7. Docker基础入门及示例

    Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...

  8. 详解meta标签

    Meta标签详解,在网上转的,希望对大家有用 引言 您的个人网站即使做得再精彩,在"浩瀚如海"的网络空间中,也如一叶扁舟不易为人发现,如何推广个人网站,人们首先想到的方法无外乎以下 ...

  9. 搭建ftp服务器实现文件共享

    FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务. FTP(File Transfer Protocol ...

  10. [转载]或许您还不知道的八款Android开源游戏引擎

    或许您还不知道的八款Android开源游戏引擎         分类:             技术文章              2010-08-04 20:27     17430人阅读     ...