2016-03-24 9 views
1

私のプロジェクトでは、選択された要素を要求されたパラメータからJSONとして返そうとしています。Grails - リクエストパラメータから選択したjson要素を返す

ドメインクラス:

class Component{ 
    String name 
    String level 
    . 
    . 
    . 
} 

私の要求が

http://localhost:8080/myapp/component/showJson?name=name&level=level 
のようなものであるならば、私は、http

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

などの要求ので、私は唯一の

{ 
    name:xyz 
} 

を返す必要がありますしています

それから私は、任意の提案が高く評価され

{ 
    name:xyz 
    level:1 
} 

を返す必要があります。

更新JSON(マルチレベル)

[ 
    {"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" 
} 

コントローラのアクション

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

答えて

2

あなたは、オブジェクトのプロパティをマップでのparamsは、マップ交差し、その結果を返すことができます。私はこれを試していないが、私はそれが動作しない理由を考えることができません。

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

アップデート:私たちは、コンポーネント(項目のリスト)を持っている場合

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

、その後、項目のリストについては、 –

+0

更新の答えを続行する方法について説明します。 – JChap

+0

私が直面している問題は、マルチレベル、コンポーネントhasManyコンポーネント –

関連する問題