2012-06-27 2 views
3

mongodb 플러그인이있는 grails 응용 프로그램이 있습니다.중첩 된 객체가있는 객체의 전체 JSON 렌더링

내 모든 도메인 객체는 다음과 같습니다

class Person { 
    ObjectId id 
    String name 
} 

class Like { 
    ObjectId id 
    Person from 
    Person to 
    Date createdAt 
} 

ID로 일부 Like에 따라 전체 데이터를 제공해야 내 컨트롤러 : 나는 수신을 원치

class MyController { 
    def like() { 
    def like = Like.findById(new ObjectId("someIdHere")); 
    render(like as grails.converters.JSON) 
    } 
} 

같은 전체 JSON 개체 :

012 3,516,
{ 
    "class":"Like", 
    "id":{ 
    "class":"org.bson.types.ObjectId", 
    "inc":1483542456, 
    "machine":805594765, 
    "new":false, 
    "time":1340363115000, 
    "timeSecond":1340363115 
    }, 
    "createdAt":"2012-06-22T11:05:15Z", 
    "from":{ 
    "class":"Person", 
    "id":{ ... }, 
    "name":"Some name here" 
    }, 
    "to":{ 
    "class":"Person", 
    "id":{ ... }, 
    "name":"Some name here" 
    } 
} 

하지만 개체의 첫 번째 레벨의 속성을받을했습니다 :

{ 
    "class":"Like", 
    "id":{ 
    "class":"org.bson.types.ObjectId", 
    "inc":1483542456, 
    "machine":805594765, 
    "new":false, 
    "time":1340363115000, 
    "timeSecond":1340363115 
    }, 
    "createdAt":"2012-06-22T11:05:15Z", 
    "from":{ 
    "class":"Person", 
    "id":"4fd31d453004dc0f010aca51" 
    }, 
    "to":{ 
    "class":"Person", 
    "id":"4fd31d463004dc0f010aca89" 
    } 
} 

내 질문은 : 몽고의 데시벨 (DBOBJECT) 데이터 객체의 JSON (참조 된 개체 포함) 전체 구성하기 위해 어떤 방법이 있습니까? 나는이 'solution with JSONBuiled'이 'class', 'metaClass'및 'dbo'라는 이스케이프 필드로 발견되었습니다. 하지만 ... 그것은는 Expando 클래스와 함께 할 수 있지만 올바른 방법을 찾을 두지

덕분에 어떤 식 으로든, 막심

답변

2

변경

render(like as grails.converters.JSON) 

render(like as grails.converters.deep.JSON) 

에 대한 생각
+0

나는이 방법을 시도했지만 응답이 { "클래스"입니다 "2012-06-22T11 : 05 :에서 15Z " " ": { "클래스 ":"사람 ", "ID ": {...}, "이름 ": 널 (null) }, "을 ": { "클래스 " "Person", "id": {...}, "name": null } } 따라서 깊은 구성으로 인해 게으른 메서드가 트리거되지 않습니다. – Maksim

+2

deep.JSON은 (는) 더 이상 사용되지 않습니다. 깊은 변환에는 JSON.use ("deep")를 사용하십시오. –

0

표준 방법은 이제 원하는대로 이름이 지정된 구성을 사용하는 것입니다.

JSON.use("deep") { 
    render like as JSON 
} 
+0

나는이 방법을 시도했지만 응답이 '{ "클래스"입니다 : "좋아요", "ID": {...}, "createdAt": "2012-06-22T11 : 05 : 15Z ", "from ": { "class ":"Person ", "id ": {...}, "이름": 널 (null) }, "을": { "클래스": "사람", "ID": {...}, "이름": 널 (null) } }' 따라서 깊은 구성은 게으른 메소드를 트리거하지 않습니다. – Maksim

0

자식 연결을 비 게으름으로 설정하십시오. 그래서

class Like { 
    ObjectId id 
    Person from 
    Person to 
    Date createdAt 



static mapping = { 
     from lazy: false 
    } 

} 
+0

unlazy configuration was well well ...하지만 도움이 될 수 있습니다. Thnx! – Maksim

+0

그렇게하지 마십시오. 많은 중첩 된 객체가 있고 하나의 속성 만 바꾸고 싶다면, 거짓 객체를 사용하여 모든 객체, 중첩 객체, 중첩 객체의 하위 중첩 객체 등을로드하십시오. – luisZavaleta

1

이 당신을 위해 문제가 계속되면, 당신은 Grails의 JSON 라이브러리보다 JSON 개체를 serialising을 통해 훨씬 더 제어 할 수있는 Jackson처럼, 또 다른 JSON 라이브러리를 시도 할 수도 있습니다. {...}, "createdAt": "ID" "좋아요"

+0

안녕하세요. 나는 내 집회 주위에 맞춤식 작품을 썼다. 나는 그것이 나에게 좋지 않다는 것을 안다). 다음에는 조언을 구하겠습니다. 감사합니다. – Maksim

관련 문제