6

JSON経由でAndroidクライアントにデータを送信するために使用されているGroovy/Grails Webサイトがあります。 AndroidクライアントとGroovy/Grailsの両方のWebサイトを作成しました。 JSONで同じオブジェクトを出力することができます。JSONを使用してGroovy/Grailsでオブジェクトを作成する

JSON出力をJavaオブジェクトにマッピングすることで、Androidでそれぞれのオブジェクトを正常に作成できますが、JSON出力を使用してGroovy/Grailsで新しいドメインオブジェクトを作成することは可能でしょうか?オブジェクトが作成されるようにJSON出力をコントローラアクションに渡す方法はありますか?

ここでは、送信したいJSONの例を示します。

{ 
    "class":"org.icc.callrz.BusinessCard.BusinessCard", 
    "id":1, 
    "businessCardDesigns":[], 
    "emailAddrs":[ 
    { 
     "class":"org.icc.callrz.BusinessCard.EmailAddress", 
     "id":1, 
     "address":"[email protected]", 
     "businessCard":{ 
      "_ref":"../..", 
      "class":"org.icc.callrz.BusinessCard.BusinessCard" 
     }, 
     "index":0, 
     "type":{ 
      "enumType":"org.icc.callrz.BusinessCard.EmailAddress$EmailAddressType", 
      "name":"H" 
     } 
    }, 
    { 
     "class":"org.icc.callrz.BusinessCard.EmailAddress", 
     "id":2, 
     "address":"[email protected]", 
     "businessCard":{ 
      "_ref":"../..", 
      "class":"org.icc.callrz.BusinessCard.BusinessCard" 
     }, 
     "index":1, 
     "type":{ 
      "enumType":"org.icc.callrz.BusinessCard.EmailAddress$EmailAddressType", 
      "name":"W" 
     } 
    } 
    ] 
} 

「クラス」は私が保存したいドメインにマッチし、IDは、ドメインのIDで、その後、businessCardDesignsとemailAddrs内の各項目は、同様の方法を用いて保存する必要がある(中ドメインbusinessCardDesignsとemailAddrsはArrayListです)。事前に多くの感謝!

SOLUTION:

@RequestMapping(method = RequestMethod.POST, headers = "Accept=application/json") 
public ResponseEntity<String> createFromJson(@RequestBody String json) { 
    Owner.fromJsonToOwner(json).persist(); 
    return new ResponseEntity<String>(HttpStatus.CREATED); 
} 

答えて

6

のために働くかもしれない、私はあなたが既に答えを受け入れ知っているが、私は右のあなたの質問を読んでいる場合は、中が内蔵されていますこれを行う方法は「Grails」です。

URLMappings.groovyにアクションのエントリを作成し、リクエストの解析を有効にします。

"/api/bizCard/save"(controller: "businessCard", parseRequest: true) { 
    action = [POST: "save"] 
} 

をそしてあなたの中に内蔵されたGrailsのJSONコンバータは、私の意見では、他の回答よりも、この容易になります使用

def save = { 
    def businessCardInstance = new BusinessCard(params.businessCard) 
    .... 
    businessCardInstance.save(flush:true) 
} 
+0

これは非常に便利であると思われるようです。貢献してくれてありがとう。私は月曜日にそれを試してみる。 :) – krslynx

12

をコントローラ:たとえば、私はそうのようなRESTfulなマッピングを作成

import grails.converters.JSON 

class PersonController { 
    def save = { 
     def person = new Person(JSON.parse(params.person)) 
     person.save(flush:true) 
    } 
} 

他の利点は次のとおりです。

  • 結果のJSONオブジェクトを割り当てるプロパティ
  • それは何が起こっているかのコード(私たちはJSONオブジェクトと設定を解析しているがはるかに明確になる前に、必要に応じて、操作することができる
  • 任意の設定ファイルに周りマックする必要はありません
+1

固定インポートパス:import grails.converters.JSON –

+1

ありがとうございました。 – OverZealous

+0

@OverZealous - まさに私が探していたもの。ありがとう。 – mtyson

関連する問題