利用jackson-databind,复杂对象对象和json数据互转
如果简单对象,那么转换的方式比较多,这里指的复杂对象,是指对象里面存在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数据互转的更多相关文章
- Jackson 对象与json数据互转工具类JacksonUtil
1,User对象 package com.st.json; import java.util.Date; /** * @Description: JSON序列化和反序列化使用的User类 * @aut ...
- 如何将java对象转换成json数据
package cn.hopetesting.com.test;import cn.hopetesting.com.domain.User;import com.fasterxml.jackson.c ...
- 后台对象转化成json数据返回给前端
一.介绍 JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json数据 二.下载jar依赖包:可以去这里下 ...
- ObjC 利用反射和KVC实现嵌套对象序列化成JSON数据
原理: 0.创建一个新的可变字典:NSMutableDictionary 1.采用class_copyPropertyList函数遍历对象的属性 2.property_getName获取属性名,val ...
- 利用es6解构赋值快速提取JSON数据;
直接上代码 { let JSONData = { title:'abc', test:[ { nums:5, name:'jobs' }, { nums:11, name:'bill' } ] } l ...
- JSON — Java与JSON数据互转
转换时Bean所要求的: 被转换的Bean必需是public的. Bean被转换的属性一定要有对应的get方法,且一定要是public的. Bean中不能用引用自身的this的属性,否则运行时出现et ...
- Spring学习---Spring中利用jackson进行JSON转换
Spring中利用jackson进行JSON转换 import java.util.List; import com.fasterxml.jackson.core.JsonProcessingExce ...
- 让复杂Json数据和对象自由转换 --- Gson
Gson是谷歌用于对Json操作的库,里面有着强大而又方便的功能,最常用的就是 fromJson():将json数据转化为对象: toJson():将对象转化为json数据! 对于普通的json数据使 ...
- js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)
js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数) 一.总结 1.JSON解析:JSON.parse(myJS ...
随机推荐
- 《Shell脚本学习指南》学习笔记之变量、判断和流程控制
变量 定义变量 可以使用export和readonly来设置变量,export用于修改或打印环境变量,readonly则使得变量不得修改.语法: export name[=word] ... read ...
- MAVEN学习(初级)
1. 项目管理利器 MAVEN 学习,参考慕课网 :http://www.imooc.com/search/?words=maven 2. 下载MEAVN 地址:http://maven.apache ...
- 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理
在之前一篇随笔<在.NET项目中使用PostSharp,实现AOP面向切面编程处理>介绍了PostSharp框架的使用,试用PostSharp能给我带来很多便利和优势,减少代码冗余,提高可 ...
- 1270: [BeijingWc2008]雷涛的小猫
1270: [BeijingWc2008]雷涛的小猫 Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 905 Solved: 430[Submit][ ...
- canvas的beginPath和closePath分析总结,包括多段弧的情况
参考博文: Html5 canvas画图教程17:论beginPath的重要性 先看两个例子 例1: <canvas id="myCanvas" width="30 ...
- 个人C++学习路线
这段时间学习<<C++ primer >> 第四版,一边学一遍考虑,要怎么样往深处学习.查了网上的学习路线,知乎大神的问题回答,整理了一下思路,如下吧: <<C++ ...
- gitoschina使用入门
1 下载git sudo apt-get install git 2 添加公钥:terminal: ssh-keygen -t rsa -C "git.oschina.net" ...
- Android 快速开发系列 ORMLite 框架最佳实践
比较靠谱的Helper的写法: 1.DatabaseHelper package com.zhy.zhy_ormlite.db; import java.sql.SQLException; impor ...
- Java EE基础之JSP(三)
原来准备简单点,用一篇文章介绍完JSP的,没想到细节很多.这是第三篇也是最后一篇,这三篇文章介绍了基本的JSP知识,很多名词概念和用法,一定要在实践项目中使用之后才会有更加亲切的体会.第三篇 ...
- iOS截取http/https流量
0x01.Why? 做移动测试的同学经常会在app和server中间架设一个代理(例如charles或者fiddler等),由经代理,app和server之间的交互及交互内容变得可视化,使得我们不再摸 ...