[英]How to exclude some fields when listing Grails domain?
我想知道如何列出Grails域并同时排除某些字段。 我猜解决方案必须很简单,但我看不到它。
我用域User准备了一些示例:
class User implements Serializable {
String username
String email
Date lastUpdated
String password
Integer status
static constraints = { }
static mapping = { }
}
此时,我要列出状态低于2的所有用户。
render User.findAllByStatusLessThen(2) as JSON
我想在没有某些字段的情况下将JSON响应呈现给客户端。 例如,我只想使用用户名和lastUpdated字段呈现用户,因此呈现的JSON如下所示:
[{"username": "user1", "lastUpdated":"2016-09-21 06:49:46"}, {"username": "user2", "lastUpdated":"2016-09-22 11:24:42"}]
最简单的方法是什么?
是的,很简单,请尝试以下解决方案
解决方案1
List userList = User.where{ status < 2 }.property("username").property("lastUpdated").list() render userList as JSON
output
[{"user1", "2016-09-21 06:49:46"}, {"user2", "2016-09-22 11:24:42"}]
解决方案2-使用此方法,您将在Key-Value
对中获得输出
List userList = User.findAllByStatusLessThen(2)?.collect{ [username : it.username, lastUpdated: it.lastUpdated]} render userList as JSON
output
[{"username": "user1", "lastUpdated":"2016-09-21 06:49:46"}, {"username": "user2", "lastUpdated":"2016-09-22 11:24:42"}]
您正在寻找Grails 投影 。
def result = Person.createCriteria().list {
lt("status", 2)
projections {
property('username')
property('lastUpdated')
}
} as JSON
好吧,如果您希望结果在key-value
对中,则可以利用HQL
查询
def query = """select new map(u.username as username, u.lastUpdated as lastUpdated) from User u where status < 2"""
def result = User.executeQuery(query)
println (result as JSON)
这将为您提供以下输出
[{"username": "user1", "lastUpdated":"2016-09-21 06:49:46"}, {"username": "user2", "lastUpdated":"2016-09-22 11:24:42"}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.