繁体   English   中英

列出Grails域时如何排除某些字段?

[英]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. 解决方案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"}]
  1. 解决方案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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM