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 ...
随机推荐
- 关于java.io.FileNotFoundException: /static/count.txt (No such file or directory) 问题的解决
这个是BUG网上有三种合理的解释: 1)这个文件在你的程序中可能涉及了读写操作,但是普通用户没有这个权限,所以加上权限就好 chmod count.txt 2)在Linux文件上下层目录是以斜杠 ' ...
- Milk(sort+结构体)
Description Ignatius drinks milk everyday, now he is in the supermarket and he wants to choose a bot ...
- 今年把js总结了一下,ppt格式的
本来想梳理成html,但是时间有限. 希望能够有所帮助. http://pan.baidu.com/s/1ntGAfED http://files.cnblogs.com/danghuijian/js ...
- POJ-Crazy tea party,很好的一道数学题~~~
Crazy tea party Time Limit: 1000MS Memory Limit: 10000K Description n participants of <& ...
- Go变量定义学习
package main import ( "fmt" ) //变量定义: //使用var关键字或:=定义变量 //可放在函数内,或直接放在包内 //使用var()集中定义 //函 ...
- [转]Fedora 添加国内源(sohu, 163)
第一种方案 在国内163和搜狐提供很好的源,现在我们把它们俩添加到我们的源库.1. 添加搜狐的源 进入网站http://mirrors.sohu.com/,在左边找到fedora目录,点击该行右边的h ...
- 2016 Multi-University Training Contest 1 solutions BY HIT
首先向大家表示抱歉,因为这套题是去年出的,中间间隔时间太长,今年又临时准备仓促, 所以部分题目出现了一些问题,非常抱歉. Abandoned country 首先注意到任意两条边的边权是不一样的,由此 ...
- 如何改变linux系统的只读文件的权限
vim 编辑可以在命令模式输入 :wq! 保存退出可以用chmod 命令修改文件权限. chmod命令是非常重要的,用于改变文件或目录的访问权限.用户用它控制文件或目录的访问权限.该命令有两种用法.一 ...
- Javascript 检查字符串是否是数字的几种方法
//判断是否是正整数 function IsNum(s) { if(s!=null){ var r,re; re = /\d*/i; //\d表示数字,*表示匹配多个数字 r = s.match(re ...
- 《TCP/IP详解卷1:协议》——第1章:概述(转载)
1.引言 很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们互相进行通信.TCP/IP起源于60年代末美国政府资助的一个分组交换网络研究项目,到90年代已发展 ...