grails Domian对象转JSON去class以及自己定义字段的最佳方式
grails:2.4.x
IDE:Intellij IDEA 13.x
grails的Domain对象之间假设存在环形引用。直接使用as JSON仅仅会输出关联对象的id。而且假设使用deep也会报错且deep并不支持层级输出设置。达不到一些程序的使用需求。
所以自己在网上翻了非常多资料,终于測试出一个比較简单可靠的方案:
1、在config.groovy中加入一句针对JSON转换的配置
grails.converters.json.default.deep = true //最好是配合默认使用deep。
<span style="color:#ff0000;">注:假设在类中使用JSON.use("deep")时,会导致JSON.registerObjectMarshaller失效,这个不知道算不算Grails的BUG</span>
grails.converters.default.circular.reference.behaviour = "INSERT_NULL"
依据官方文档描写叙述grails的converters类在转换JSON或XML时默认是输出全部环型引用的对象,所以这里要把它改成“INSERT_NULL”。就是假设碰到环型引用,就输出NULL
2、对象转换及自己定义字段代码:
//JSON.use("deep") //config.groovy里全局设置
def json = new JSON(ug)
// json.setIncludes(Org.class,["field1","field2"]) //指定某字段能够用这种方法
json.setExcludes(Org.class,["class"]) //去除不要的字段
json.setExcludes(User.class,["class","passwordHash"]) //去除不要的字段
json.setExcludes(Role.class,["class"]) //去除不要的字段
// json.prettyPrint = true //格式化json字符串(可有可无)
// //假设想要加入其他字段,能够用下面方式
// JSONObject myjson = new JSONObject()
// myjson.put("dataList",json)
// myjson.put("page",1)
// myjson.put("pageSize",2)
// myjson.put("pageTotal",3)
// myjson.put("dataCount",4)
// myjson.put("searchContent",5)
// println(myjson)
render json
3、事实上还能够用JSON.registerObjectMarshaller来写自己的JSON构造方法,可是这种方法使用不太方便,所以暂不推荐,仅仅有想用grails的JSON去转换其他框架里的对象时可能会用到(比方activiti框架的Entity对象)。
grails Domian对象转JSON去class以及自己定义字段的最佳方式的更多相关文章
- json-lib date对象转json ,加入自定义日期格式处理
import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValu ...
- json相关类库,java对象与json相互转换
有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...
- javascript的对象 和 JSON 对象?
关于js和JSON的 一篇 好文章: http://www.68idc.cn/help/makewebs/javascript/20150704416007.html 讲的很好 很易懂 在将javas ...
- JSON-lib框架,JAVA对象与JSON、XML之间的相互转换
Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象. 一. 准备工作 ...
- 使用jackson对Java对象与JSON字符串相互转换的一些总结
本文为菠萝大象原创,如要转载请注明出处.http://www.blogjava.net/bolo 代码无真相,为了最简单的说明,我直接上代码. public class User { private ...
- JSON(二)——JavaScript中js对象与JSON格式字符串的相互转换
首先我们来看一下js中JSON格式的字符串 var JSONStr1 = "{\"name\" : \"张三\"}"; 注意以下的写法不是j ...
- FastJson、Jackson、Gson进行Java对象转换Json细节处理
前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...
- 三:C#对象转换Json时的一些高级(特殊)设置;
导航目录: Newtonsoft.Json 概述 一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型: 二:C#对象.集合.DataTable与Json内容互转示例: ...
- 对象&内置对象& 对象构造 &JSON&__proto__和prototype
原型是一个对象,其他对象可以通过它实现属性继承 原型链:每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性 时,如果这个对象内部不存在这个属性,那么他就会去__pro ...
随机推荐
- PCB线宽与电流计算器--在线计算
http://eda365.com/article-12-1.html 计算线宽与载流量的关系,方便设计:单个人建议在有限的空间尽量将大电流线路加宽.
- Sql按照字段分组,选取其他字段最值所在的行记录
引言: 为什么会引入这个问题,在程序中遇到这样的问题,在某个数据表中,相同的AID(项目ID)被多次添加到数据表中,所以对应于不同的时间,只想选取添加时间最早的哪一条记录. 参考:红黑联盟 所用到的数 ...
- 在JavaScript中获取Map集合中的key和value值(前提是:既不知道key为什么值,也不知道value有哪些值)
- python request包使用指西
request是Python的一个网络模块包,使用它可以快速写一些强大的爬虫脚本
- 机器学习基础-Logistic回归1
利用Logistic回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类. 训练分类器时的做法就是寻找最佳拟合参数,使用的时最优化算法. 优点:计算代价不高,利于理解和实现. ...
- 搭建双塔(vijos 1037)
描述 2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难.为了纪念“9?11”事件,Mr. F决定自己用水晶来搭建一座双塔. Mr. F有N块水晶,每块 ...
- msp430入门编程47
msp430中C语言的人机交互--菜单退出 msp430入门编程 msp430入门学习
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
本文转自:http://mt.sohu.com/20160803/n462486707.shtml 最近一段时间不论互联网还是传统行业,凡是涉及信息技术范畴的圈子几乎都在讨论 微服务架构 .近期也看到 ...
- C. Nearest vectors--cf598C(极角排序)
http://codeforces.com/problemset/problem/598/C 题目大意: 给你你个向量 向量的起点都是从(0,0)开始的 求哪个角最小 输出这两个向量 这是第一 ...
- codeforces 301 E. Infinite Inversions
题目: time limit per test 2 seconds memory limit per test 256 megabytes input standard input output ...