2012-05-23 6 views
4

게시 요청에 대한 모든 JSON 응답에 success 필드를 포함하고 싶습니다. 이 필드를 추가하는 가장 좋은 방법은 무엇입니까?Grails JSON 응답에 추가 필드를 추가하는 방법이 있습니까?

try { 
    def entity = myService.saveEntity(arg1,arg2) 
    render [ success:'yes', val:entity ] as JSON 
} catch (ValidationException e) { 
    render [ success:'no', val:parseErrors(e.errors) ] as JSON 
} 

그것을 테스트하지 :

try { 
    def entity = myService.saveEntity(arg1,arg2) 
    render entity as JSON //I want to add artificial field 'success = "yes"' here 
} catch (ValidationException e) { 
    render parseErrors(e.errors) as JSON //field 'success = "no"' here 
} 

답변

4

당신이 success 필드를 포함하는지도, 별도의 변수를 내부에 랩 객체를 반환 할 수 없습니다 :

나는 JSON 응답을 생성하기 위해 다음과 같은 코드를 사용 마음 ...

4

예 :

과 같이 자신의 JSON 마샬 러를 등록 할 수 있습니다 (예 : BootStrap.groovy). MyEntity는 클래스가 어디에 6,
JSON.registerObjectMarshaller(MyEntity) { MyEntity it -> 
    return [ 
    someField : it.someField, // you should specify fields for output, or put all '.properties' 
    success : true // as I understand you always have 'true' for real entity 
    ] 
} 

당신은 그냥 이번 주에이 정확한 문제로 고생

7

사용하고 싶습니다. 나는 도메인 클래스를 JSON으로 다시 보내고 싶었지만, 동시에 추가 정보를 포함 할 수있는 'errorMessage'속성을 추가했다.

는 Grails의에서 JSON로 를 사용하는 경우는 컨버터 개체를 다시 보내는 밝혀, 그러나 그 수를 우리가 쉽게 새로운 값을 추가 할 수 있습니다 JSON.parse()을 사용 된 JSONObject로 그 변환기 인스턴스를 켭니다.

def jsonObject = JSON.parse((entity AS JSON).toString()) 
jsonObject.put("success", "yes") 
render jsonObject as JSON 

나는이 두개의 서로 다른 접근법은 그러나 이것은 이미 내 도메인 클래스의 대부분을 사용자 정의 변환기이 있기 때문에 저를위한 가장 쉬운되고 결국 나는에 다른 일시적인 속성을 추가하고 싶지 않았다 생각 내 도메인 개체.

+1

가장 간단한 해결책입니다. 나는 이것이 받아 들여진 대답이라고 투표한다. – mastaBlasta

관련 문제