Java 如何在列出Grails域时排除某些字段?
我想知道如何列出Grails域并同时排除一些字段。我猜答案一定很简单,但我就是看不出来 我准备了一些域用户示例:Java 如何在列出Grails域时排除某些字段?,java,grails,gorm,render,grails-domain-class,Java,Grails,Gorm,Render,Grails Domain Class,我想知道如何列出Grails域并同时排除一些字段。我猜答案一定很简单,但我就是看不出来 我准备了一些域用户示例: class User implements Serializable { String username String email Date lastUpdated String password Integer status static constraints = { } static mapping = { } }
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响应呈现给clientside,但不包含一些字段。例如,我只想使用字段username和lastUpdated呈现用户,因此呈现的JSON如下所示:
[{"username": "user1", "lastUpdated":"2016-09-21 06:49:46"}, {"username": "user2", "lastUpdated":"2016-09-22 11:24:42"}]
最简单的方法是什么?是的。很简单。试试下面的解决方案
List userList = User.where{ status < 2 }.property("username").property("lastUpdated").list()
render userList as JSON
键值
对中的输出
List userList = User.findAllByStatusLessThen(2)?.collect{
[username : it.username, lastUpdated: it.lastUpdated]}
render userList as JSON
输出
[{"user1", "2016-09-21 06:49:46"}, {"user2", "2016-09-22 11:24:42"}]
[{"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
如果希望结果是
键值
对,可以利用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)
谢谢你的意见。解决方案2最适合我的情况。
[{"username": "user1", "lastUpdated":"2016-09-21 06:49:46"}, {"username": "user2", "lastUpdated":"2016-09-22 11:24:42"}]