grails Domian对象转JSON去class以及自定义字段的最佳方式
2014-07-17 09:16
323 查看
grails:2.4.x
IDE:Intellij IDEA 13.x
grails的Domain对象之间如果存在环形引用,直接使用as JSON只会输出关联对象的id,并且如果使用deep也会报错且deep并不支持层级输出设置。达不到一些程序的使用需求。
所以自己在网上翻了很多资料,最终测试出一个比较简单可靠的方案:
1、在config.groovy中添加一句针对JSON转换的配置
2、对象转换及自定义字段代码:
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 json3、其实还可以用JSON.registerObjectMarshaller来写自己的JSON构造方法,但是这个方法使用不太方便,所以暂不推荐,只有想用grails的JSON去转换其它框架里的对象时可能会用到(比如activiti框架的Entity对象)。
相关文章推荐
- grails Domian对象转JSON去class以及自己定义字段的最佳方式
- java方式的将java对象以及list或者map转化为json数据,json转换为object或者map
- java中json包的使用以及字符串,map,list,自定义对象之间的相互转换
- JavaScript Json与Map互转以及Map对象的取值方式
- java方式的将java对象以及list或者map转化为json数据
- synchronized锁方法,synchronized锁对象,synchronized(this),synchronized(class)最佳理解方式
- java中自定义封装json以及和对象的转换
- Objective-C Copy语法(二)对于我们自定义对象Copy以及[self class]相关的错误
- java中json包的使用以及字符串,map,list,自定义对象之间的相互转换
- AJAX JSON中日期类型DateTime格式化的序列化自定义对象以及自定义类型参数的问题处理
- java语言反射的概述以及三种获取字节码文件对应的Class类型的对象的方式
- 面向对象的设计方式处理Android编程中的GridView问题,以及自定义ListAdapter的使用
- Java中的Class类以及获取Class对象的三种方式
- 85---ajax实现的传统方式以及jquery方式,jquery方式的五种方法,json对象的转换方法, JSON类型的Result
- window.open() POST 方式提交json数据,以及后台的json序列化为对象
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- Golang 父子对象与JSON互相转换以及struct结构体内部的反引号该如何定义字段编码生成json字符串的写法
- springMvc-对servletApi的支持以及把后台对象以json方式传到前台
- Json对象与Json字符串互转(4种转换方式) jquery 以及 js 的方式
- Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)