列出Grails域时如何排除某些字段?
How to exclude some fields when listing Grails domain?
我想知道如何列出 Grails 域并同时排除一些字段。我猜解决方案一定很简单,但我就是看不到它。
我用域用户准备了一些示例:
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 响应。例如,我只想呈现具有字段 username 和 lastUpdated[= 的用户28=] 这样呈现的 JSON 看起来像这样:
[{"username": "user1", "lastUpdated":"2016-09-21 06:49:46"}, {"username": "user2", "lastUpdated":"2016-09-22 11:24:42"}]
实现该目标的最简单方法是什么?
Yeah.It的simple.Try以下解决方案
解决方案 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 projections。
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"}]
我想知道如何列出 Grails 域并同时排除一些字段。我猜解决方案一定很简单,但我就是看不到它。
我用域用户准备了一些示例:
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 响应。例如,我只想呈现具有字段 username 和 lastUpdated[= 的用户28=] 这样呈现的 JSON 看起来像这样:
[{"username": "user1", "lastUpdated":"2016-09-21 06:49:46"}, {"username": "user2", "lastUpdated":"2016-09-22 11:24:42"}]
实现该目标的最简单方法是什么?
Yeah.It的simple.Try以下解决方案
解决方案 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 projections。
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"}]