2015-01-19 4 views
2

나는 다음과 같은 한 도메인 클래스 명명 : 상자를위한 Marshaller의 구성 명명 된가 Grails는 JSON 마샬에 대한 구성 2.4.4

class Domain1{ 
    String prop1 
    Domain2 prop2 
} 

class Domain2{ 
    String prop3 
} 

그리고이 각

나는이 이름이 설정을 사용하려고

JSON.createNamedConfig('PUBLIC_API'){ 
     it.registerObjectMarshaller(Domain1){Domain1 domain1-> 
      return ['key1': domain1.prop1, 'key2': domain1.prop2] 
     } 
} 

JSON.createNamedConfig('PUBLIC_API'){ 
     it.registerObjectMarshaller(Domain2){Domain2 domain2-> 
      return ['key1': domain2.prop3] 
     } 
} 
, 마샬링은 부모 도메인 객체에서만 수행되며 중첩 된/자식 클래스의 마셜 러는 호출되지 않습니다.

그래서,

{ 
    "key1": "value1", 
    "key2": { 
     "id": 1, 
     "class" : "Domain2", 
     "prop3" : "value2" 
    } 
} 

이 설정

JSON.use('PUBLIC_API'){ 
    render domain1 as JSON 
} 

결과를 사용하여 내가 누구와 함께 일했다 grails documentation

에 이름 마샬 CONFIGS의 이러한 사용에 대해 아무것도 찾을 수 없습니다 그런가요? 또는 이것이 심지어 지원된다면?

+0

중첩 된 마셜 러는 이름이 지정된 구성없이 정상적으로 작동하지만 내 유스 케이스는 아닙니다. 도메인 당 최소 2 가지 다른 형식을 등록해야하며 &라는 이름의 구성이 안도감이 될 것이라고 생각했습니다. – v1p

+0

3 개의 다른 구성 ... 이름이 지정되지 않은 구성 및 2라는 자식 도메인에 대한 2 개의 구성을 추가했습니다. 이것은 문제를 해결하지 못하지만 해결 방법 일뿐입니다. – v1p

답변

0

나는 같은 문제를 해결했습니다 내 클라이언트의 내가 differents의 도메인에서 유사한 jsons를 보내

JSON.registerObjectMarshaller(Domain1) { Domain1 domain1-> 
      return [ 
        id  : domain1.id, 
        label : domain1.prop 
      ] 
     } 
     JSON.registerObjectMarshaller(Domain2) { Domain2 domain2-> 
      return [ 
        id   : domain2.id, 
        label  : domain2.anotherProp 
      ] 
     } 

     render((domains1+ domains2) as JSON); 

는 아마 당신을 위해 도움이 될 것입니다.

+0

정교하게 말씀해 주시겠습니까? 라이브러리 (library + geneSets)는 무엇입니까? – v1p

+0

나는 당신이 그 문제를 잘못 읽었다 고 생각합니다. 문제는 중첩 된 연결로, 명명 된 구성으로 렌더링되지 않습니다. – v1p