zoukankan      html  css  js  c++  java
  • 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对象)。



  • 相关阅读:
    [BZOJ 1095] [ZJOI 2007]Hide 捉迷藏
    [BZOJ 2759] 一个动态树好题
    BZOJ 3122 SDOI2013 随机数生成器
    [NOIP集训]10月18日
    [NOIP集训]10月17日
    [NOIP集训]10月16日
    [NOI题库]1.3编程基础之算术表达式与顺序执行 题解(一)
    [NOI题库]1.2编程基础之变量定义、赋值及转换 题解
    [NOI题库]1.1编程基础之输入输出 题解
    [作业]排序算法练习(二)
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6817599.html
Copyright © 2011-2022 走看看