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. viva correction statements

    * List of amendments| No. | Location     | Amendments                                                ...

  2. 【NEFU 117 素数个数的位数】(素数定理)

    Description 小明是一个聪明的孩子,对数论有着很浓烈的兴趣. 他发现求1到正整数10n 之间有多少个素数是一个很难的问题,该问题的难以决定于n 值的大小. 现在的问题是,告诉你n的值,让你帮 ...

  3. Eclipse设置反编译插件

    有些项目我们想看看引入的包的源码的时候,因为打包好的.class文件的内容我们是看不懂的,但是又懒得去找源码文件的时候,就会用到反编译工具. 步骤: 1.安装反编译插件. 2.设置使用的反编译工具. ...

  4. LayUI分页基于ASP.NET MVC

    ---恢复内容开始--- 今天写了挺久的分页,百度了很多都没有很好的.Net实例,今天我来更新一期关于layuiTable分页 首先你得理解layui的官方文档的Table分页部分,我在这里附上地址 ...

  5. Leetcode 264.丑数II

    丑数II 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10 ...

  6. [luoguP1627] 中位数(模拟?)

    传送门 水题,怎么评到这个难度的? #include <cstdio> #include <iostream> #define N 200001 int n, b, p, an ...

  7. BZOJ4552 - [TJOI2016]排序

    Portal Description 给出一个\(1..n(n\leq10^5)\)的排列,进行\(m(m\leq10^5)\)次操作: 升序排列\([L,R]\)中的数. 降序排列\([L,R]\) ...

  8. 2016 Multi-University Training Contest 3 solutions BY 绍兴一中

    1001 Sqrt Bo 由于有\(5\)次的这个限制,所以尝试寻找分界点. 很容易发现是\(2^{32}\),所以我们先比较输入的数字是否比这个大,然后再暴力开根. 复杂度是\(O(\log\log ...

  9. Linux 端口开放

    Linux(CentOS): 系统缺省值为32768-61000. 修改方法: 在/etc/sysctl.conf中,增加以下配置:(开放20000-50000为完成端口) net.ipv4.ip_l ...

  10. 推荐10+必备的 WordPress 常用插件

    众多的WordPress插件,使得WordPress的功能得到了较大的扩展,但是也正是由于过多的插件,导致我们很难选择所需的插件.今天,倡萌就根据自己的经验,给WordPress新手推荐一些常用的插件 ...