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. DEV Express

    记录在使用DEV Express中遇到的所有问题及解决方案 问题1:将Dev11升级到Dev14 解决方案:将解决方案中原有Dev引用删除,重新添加必须的Dev14引用,问题解决: 问题2:LC.ex ...

  2. luoguT21778 过年

    差分一下上线段树 #include <iostream> #include <cstdio> #include <vector> using namespace s ...

  3. notepad++编辑器写python需注意使用utf-8编码

    语言:python3.4 文本编辑器:notepad++ 报错:SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xb4 in ...

  4. 大数据学习——flume日志分类采集汇总

    1. 案例场景 A.B两台日志服务机器实时生产日志主要类型为access.log.nginx.log.web.log 现在要求: 把A.B 机器中的access.log.nginx.log.web.l ...

  5. 全局Session-GlobalSession

    import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.spri ...

  6. 【BZOJ2982】combination(Lucas定理)

    题意:求C(n,m) n,m<=200000000 思路:c(n,m)=c(n mod mo,m mod mo)*c(n div mo,m div mo) mod mo (n>=mo或m& ...

  7. Java有几种线程池?

    Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程newFixed ...

  8. MySql数据库导出csv文件命令

    MySql数据库导出csv文件命令: MySql数据库导出csv文件命令: mysql> select first_name,last_name,email from account into ...

  9. 2018-2019 XIX Open Cup, Grand Prix of Korea (Division 2) GYM 102058 F SG函数

    http://codeforces.com/gym/102058/problem/F 题意:平面上n个点  两个人轮流在任意两个点之间连一条线但是不能和已有的线相交,先围成一个凸多边形的获胜,先手赢还 ...

  10. UVA 11827 Maximum GCD【GCD,stringstream】

    这题没什么好说的,但是输入较特别,为此还WA了一次... 题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge& ...