7

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

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":"chris@krslynx.com",
        "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":"cb@i-cc.cc",
        "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 は ArrayLists です)。 )。よろしくお願いします!

解決:

@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);
}
4

3 に答える 3

14

私の意見では、組み込みの Grails JSON コンバーターを使用すると、他の回答よりも簡単になります。

import grails.converters.JSON

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

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

  • 設定ファイルをいじる必要はありません
  • 結果の JSON オブジェクトは、必要に応じて、プロパティを割り当てる前に操作できます。
  • 何が起こっているかは、コードの方がはるかに明確です (JSON オブジェクトを解析し、Person エンティティのプロパティを設定しています)。
于 2011-09-11T08:01:03.670 に答える
6

あなたがすでに回答を受け入れていることは知っていますが、あなたの質問を正しく読んでいれば、これを行うための組み込みの「Grails」方法があります。

アクションのエントリを URLMappings.groovy に作成し、リクエストの解析をオンにします。たとえば、RESTful マッピングを次のように作成します。

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

そして、あなたのコントローラーで

def save = {
   def businessCardInstance = new BusinessCard(params.businessCard)
   ....
   businessCardInstance.save(flush:true)
}
于 2011-09-09T21:17:49.363 に答える
1

これはあなたのために働くかもしれません

http://static.springsource.org/spring-roo/reference/html/base-json.html

于 2011-09-09T16:14:58.613 に答える