2016-03-24 7 views
1
zurückgeben

In meinem Projekt versuche ich, ausgewählte Elemente als JSON vom angeforderten Parameter zurückzugeben.Grails - Ausgewählte json-Elemente aus dem Anforderungsparameter

Domain-Klasse:

class Component{ 
    String name 
    String level 
    . 
    . 
    . 
} 

Ich habe http Anfrage wie

http://localhost:8080/myapp/component/showJson?name=name 

so sollte ich wieder nur

{ 
    name:xyz 
} 

Wenn meine Anfrage wie

ist
http://localhost:8080/myapp/component/showJson?name=name&level=level 

Dann sollte ich

{ 
    name:xyz 
    level:1 
} 

Rückkehr Irgendwelche Vorschläge geschätzt wird.

Aktualisiert JSON (Multi-Level)

[ 
    {"name":"one","level":0," 
     componentTypes":[ 
       {"name":"one one","level":1, 
        "componentTypes":[ 
         {"name":"one one one","level":2,"componentTypes":[]} 
        ] 
       }, 
       {"name":"one two","level":1,"componentTypes":[]} 
     ] 
    }, 
    {"name":"two","level":0,"componentTypes"[]}, 
    {"name":"three","level":0,"componentTypes":[]} 
] 

class ComponentType { 
    String name 
    Integer level 
    static hasMany = [componentTypes:ComponentType] 
    ComponentType parent 
    static constraints = { 
     parent nullable:true 
    } 
    static mapWith = "mongo" 
} 

Controller-Aktion

componentTypeList = ComponentType.createCriteria().list(){ 
      eq("level", 0) 
     } 

Antwort

2

Sie können schneiden Karte die params mit Objekteigenschaften Karte und das Ergebnis zurück. Ich habe das nicht versucht, aber ich kann mir keinen Grund vorstellen, warum es nicht funktionieren wird.

def properties = component.properties; 
def result = properties.subMap(params.keySet()) 
render result as JSON 

Update:

class ComponentType { 

    . 
    . 
    . 



    def toJSON(def params) { 
     def properties = this.properties 
     def result = properties.subMap(params.keySet()) 
     if(this.componentTypes) { 
      result.componentTypes = componentTypes*.toJSON(params) 
     } 
     result 
    } 
} 


def componentTypeList = ComponentType.createCriteria().list(){ eq("level", 0) } 
render componentTypeList*.toJSON(params) as JSON 
+0

Wenn wir Komponenten (Liste der Elemente), dann wie –

+0

aktualisiert Antwort Liste der Elemente, um fortzufahren. – JChap

+0

Das Problem, das ich gegenüberstelle, ist, Multilevel, Komponente hasMany Komponenten –

Verwandte Themen