首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails - grails.converters.JSON -删除类名

Grails - grails.converters.JSON -删除类名
EN

Stack Overflow用户
提问于 2011-06-28 00:02:40
回答 7查看 11.8K关注 0票数 12

有没有办法删除JSON转换器中的class字段?

示例:

代码语言:javascript
复制
import testproject.*
import grails.converters.*  
emp = new Employee()  
emp.lastName = "Bar"  
emp as JSON  

作为一个字符串,

代码语言:javascript
复制
{"class":"testproject.Employee","id":null,"lastName":"Bar"}

我更喜欢

代码语言:javascript
复制
{"id":null,"lastName":"Bar"}

有没有办法在最后再添加一行代码来删除class字段?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-09-24 13:12:40

还有一种方法可以做到这一点。我在域类中添加了下一段代码:

代码语言:javascript
复制
static {
    grails.converters.JSON.registerObjectMarshaller(Employee) {
    return it.properties.findAll {k,v -> k != 'class'}
    }
}

但是我发现,如果你使用了Groovy @ToString类注释,当你还必须添加' class‘来排除参数时,例如:

代码语言:javascript
复制
@ToString(includeNames = true, includeFields = true, excludes = "metaClass,class")
票数 12
EN

Stack Overflow用户

发布于 2012-10-12 16:34:19

我更喜欢这样做:

代码语言:javascript
复制
def getAllBooks() {
    def result = Book.getAllBooks().collect {
        [
            title: it.title,
            author: it.author.firstname + " " + it.author.lastname,
            pages: it.pageCount,
        ]
    }
    render(contentType: 'text/json', text: result as JSON)
}

这将返回Book.getAllBoks()中的所有对象,但collect方法将全部更改为您指定的格式。

票数 7
EN

Stack Overflow用户

发布于 2011-06-28 00:09:37

一种替代方法是不使用构建器:

代码语言:javascript
复制
def myAction = {
    def emp = new Employee()
    emp.lastName = 'Bar'

    render(contentType: 'text/json') {
        id = emp.id
        lastName = emp.lastName
    }
}

这有点不太正交,因为如果员工发生变化,您将需要更改渲染;另一方面,您可以更多地控制渲染的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6495633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档