Java 如何在列出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 = { } }

我想知道如何列出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响应呈现给clientside,但不包含一些字段。例如,我只想使用字段usernamelastUpdated呈现用户,因此呈现的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
    
  • 解决方案2-使用此选项,您将获得
    键值
    对中的输出

    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"}]