2016-09-23 5 views
2

Ich frage mich, wie ich Grails Domain auflisten und einige Felder zur gleichen Zeit ausschließen kann. Ich schätze Lösung muss einfach sein, aber ich kann es einfach nicht sehen.Wie kann man einige Felder ausschließen, wenn man die Grails-Domain auflistet?

ich bereit, einige Beispiel mit Domain-Benutzer:

class User implements Serializable { 
    String username 
    String email 
    Date lastUpdated 
    String password 
    Integer status 

    static constraints = { } 

    static mapping = { } 
} 

An dieser Stelle ich alle Benutzer auflisten möchten, die 2. unter Status haben

render User.findAllByStatusLessThen(2) as JSON 

Ich möchte JSON-Antwort machen, ohne zu client einige Felder. Zum Beispiel möchte ich nur Benutzer mit Feldern Benutzername und Lastupdated machen, so rendered JSON würde wie folgt aussehen:

[{"username": "user1", "lastUpdated":"2016-09-21 06:49:46"}, {"username": "user2", "lastUpdated":"2016-09-22 11:24:42"}] 

Was ist der einfachste Weg, das zu erreichen?

Antwort

3

Yeah.It der simple.Try unten Lösungen

  1. Lösung 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. So lution 2 - dies wird bereitet Sie Ausgabe im Key-Value Paar

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

Vielen Dank für deine Eingabe. Lösung 2 passt in meinem Fall am besten. – matox

2

Sie suchen Grails projections bekommen.

def result = Person.createCriteria().list { 
    lt("status", 2) 
    projections { 
     property('username') 
     property('lastUpdated') 
    } 
} as JSON 
1

Nun, wenn Sie wollen das Ergebnis in key-value Paar sein, können Sie die Vorteile von HQL Abfrage

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) 

Diese Sie die Ausgabe als geben nehmen unter

[{"username": "user1", "lastUpdated":"2016-09-21 06:49:46"}, {"username": "user2", "lastUpdated":"2016-09-22 11:24:42"}] 
Verwandte Themen