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以及自己定义字段的最佳方式的更多相关文章

  1. json-lib date对象转json ,加入自定义日期格式处理

    import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValu ...

  2. json相关类库,java对象与json相互转换

    有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...

  3. javascript的对象 和 JSON 对象?

    关于js和JSON的 一篇 好文章: http://www.68idc.cn/help/makewebs/javascript/20150704416007.html 讲的很好 很易懂 在将javas ...

  4. JSON-lib框架,JAVA对象与JSON、XML之间的相互转换

    Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象. 一. 准备工作 ...

  5. 使用jackson对Java对象与JSON字符串相互转换的一些总结

    本文为菠萝大象原创,如要转载请注明出处.http://www.blogjava.net/bolo 代码无真相,为了最简单的说明,我直接上代码. public class User { private  ...

  6. JSON(二)——JavaScript中js对象与JSON格式字符串的相互转换

    首先我们来看一下js中JSON格式的字符串 var JSONStr1 = "{\"name\" : \"张三\"}"; 注意以下的写法不是j ...

  7. FastJson、Jackson、Gson进行Java对象转换Json细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  8. 三:C#对象转换Json时的一些高级(特殊)设置;

    导航目录: Newtonsoft.Json 概述 一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型:    二:C#对象.集合.DataTable与Json内容互转示例: ...

  9. 对象&内置对象& 对象构造 &JSON&__proto__和prototype

    原型是一个对象,其他对象可以通过它实现属性继承 原型链:每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性 时,如果这个对象内部不存在这个属性,那么他就会去__pro ...

随机推荐

  1. Python爬虫-爬取京东商品信息-按给定关键词

    目的:按给定关键词爬取京东商品信息,并保存至mongodb. 字段:title.url.store.store_url.item_id.price.comments_count.comments 工具 ...

  2. C#语言之字符串和正则表达式

    本文将完成以下两个目标: 一.创建字符串: 二.正则表达式: 首先,我先来介绍一下System.String类: System.String是一个类,专门用于存储字符串,允许对字符串进行许多操作. 使 ...

  3. 【HIHOCODER 1526】 序列的值(二进制DP)

    时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个长度为 n 的序列 a[1..n],定义函数 f(b[1..m]) 的值为在 [0,m-1] 内满足如下条件的 i ...

  4. HDU 1257 最少拦截系统(最长上升子序列)

    题意: 给定n个数, 然后要求看看有多少对不上升子序列. 分析: 求出最长上升子序列, 那么整个序列中LIS外的数都会在前面找到一个比自己大的数, 所以不上升子序列最多有最长上升子序列个数个. 关于求 ...

  5. 软件测试人员遇到发现的bug不能重现怎么办?

    软件测试人员遇到发现的bug不能重现怎么办?   刚刚进入测试的童鞋们,想必都遇到过提出的bug,开发要求重现之后,但是在系统上已经重现不了的情况吧. 那么碰到这样的情况,不管开发还是测试都很纠结,开 ...

  6. XV6第一个进程

    第一个进程 本章通过第一个进程的创建来解释 xv6 是如何开始运行的,让我们得以一窥 xv6 提供的各个抽象是如何实现和交互的.xv6 尽量复用了普通操作的代码来建立第一个进程,避免单独为其撰写代码. ...

  7. HaHa's Morning(状压DP)

    描述 HaHa is so happy today, he is going to participate the 7th Hunan University Programming Contest. ...

  8. Archiving not possible: No primary destinations errors

    If space ran out in an archive destination, after you fix the problem, you may still recieve the fol ...

  9. iOS第三方语音-微信语音

    网址链接:http://pr.weixin.qq.com/ 里面包含了微信语音和图像,集成很简单,下载方demo后会有个文档,按照流程来(因为它只提供了真机的.a文件,所以只能用真机哦,不然会报错) ...

  10. hdu3306:Another kind of Fibonacci

    A(0)=A(1)=1,A(i)=X*A(i-1)+Y*A(i-2),求S(n)=A(0)^2+A(1)^2+A(2)^2+A(3)^2+……+A(n)^2. 这个矩阵有点毒.. #include&l ...