6

JSON을 통해 Android 클라이언트에 데이터를 전송하는 데 사용되는 Groovy/Grails 웹 사이트가 있습니다. 안드로이드 클라이언트와 Groovy/Grails 웹 사이트를 만들었습니다. JSON에서 동일한 객체를 출력 할 수 있습니다.JSON을 사용하여 Groovy/Grails에서 객체 만들기

JSON 출력을 Java 객체에 매핑하여 안드로이드에서 각각의 객체를 성공적으로 만들 수 있습니다. 그러나 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입니다. 미리 많은 감사드립니다!

해결책 :

@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

을 컨트롤러 : 예를 들어, 난과 같이 편안하고 맵핑을 작성

import grails.converters.JSON 

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

다른 장점은 다음과 같습니다

  • 결과 JSON 객체가 지정하는 속성
  • 그것은 무슨 일이 일어나고 있는지 코드 (우리는 JSON 객체와 설정을 구문 분석하고 훨씬 명확되기 전에, 필요한 경우, 조작 할 수
  • 어떤 설정 파일에 주위 깨끗이 할 필요가 없습니다 Person 엔터티의 속성)
+1

고정 수입 경로 : 수입 grails.converters.JSON –

+1

그 오타를 붙잡아 주어서 고마워. – OverZealous

+0

@OverZealous - 정확히 내가 무엇을 찾고 있었습니까. 감사. – mtyson

관련 문제