2013-05-22 2 views
1

JSON 형식으로 클라이언트에서 (ajax를 통해) 전송 된 복잡한 객체를 컨트롤러에서 검색하려고하는데 일부 속성이 변환 된지도를 params에서 가져 오는 방법을 알지 못합니다.어떻게 Grails 컨트롤러의 params에서 맵을 가져 옵니까?

{ 
    language: "java", 
    meta: { 
     category: "category1" 
    } 
} 
:

예를 들어, 이것은 "복합체"JSON 객체 상상 (메타 대상 항목 수는 하나, 둘, 셋 ... 변수 이름이 될 수 가변)

이 객체가 jQuery를 통해 전송되면, 컨트롤러에서 나는 PARAMS 객체이 얻을 :

[language:java, meta[category]:category1, action: register, controller: myController] 

내가 jQuery를 통해 객체를 전송하는 방법이다. 나는 여러 통화에 대한 공통 기능을 가지고 :

if (!params) params = {}; 

var url = this.urls.base+"/"+controller+"/"+action+"?callback=?"; 
if (params.callback) 
    url = this.urls.base+"/"+controller+"/"+action+"?callback="+params.callback; 
url = url + "&_"+new Date(); 
delete params.callback; 
$.ajax({ 
    url: url, 
    data: params, 
    crossDomain:true, 
    dataType:'jsonp', 
    cache:false, 
    ajaxOptions: {cache: false}, 
    jsonp: params.callback?false:true 
}); 

나는 내가

내가 컨트롤러에 params.meta을하려고하면 전에 쓴 JSON 객체를 테스트하기 위해 보내 아약스 호출에 대한 PARAMS에서

, 널 객체가 생겼어. params 객체에서지도를 가져 오려면 어떻게해야합니까?

+0

어떻게 클라이언트 측에서이 개체를 보내려면 어떻게합니까? –

+0

내 편집 된 질문보기 – Eylen

답변

4

클라이언트 측에서는 POST 메소드를 사용하여 데이터를 보내고 JSON으로 보내도록 jQuery를 구성해야합니다.

data = { 
    language: "java", 
    meta: { 
     category: "category1" 
    } 
} 
$.ajax({ 
    type: 'POST', 
    data: JSON.stringify(data), 
    contentType: 'application/json', 
}) 

그리고 request.JSON이 문서 참조로 서버 측에서 얻을 :처럼 당신이 크로스 도메인 요청, POST 방법은 그냥 작동하지 않습니다 확인해야하는 경우, http://grails.org/doc/2.2.0/ref/Servlet%20API/request.html

을하지만. 이 경우 복잡한 객체를 매개 변수로 전달하고 문자열에서 서버를 구문 분석 할 수 있습니다. 마찬가지로 :

$.ajax({ 
    data: {myjson: JSON.stringify(data)} 
}) 

과 :

def myjson = JSON.parse(params.myjson) 
+0

감사합니다. 두 번째 옵션은 훌륭합니다! 나는 params.getMap()과 비슷한 params.getList()와 같은 직접 접근법이 있기를 바랐으나이 옵션은 괜찮 았고 너무 많은 수동 변환을 도입하지 않았다 (다른 옵션은 do 수동으로) – Eylen