2012-04-06 2 views
1

내가더 요청이 응용 프로그램에서 GET 메서드를 통해 없는지 확인하고 확인 모든 양식 제출 및 서버에 제출 된 모든 데이터를 확인하기 위해

if(request.method == 'GET') { 
     response.sendError(405) 
    } else { 
     // the rest of the delete action goes here 
    } 

우리는이를 적용 할 수있는 코드의 조각을 발견 GET을하지 않습니다 모든 컨트롤러에 의해 확장 된 아웃베이스 컨트롤러이므로 코드는 모든 곳에서 반복되지 않습니다. 위의 방법은 기존 방법을 확인합니다. 알고 싶습니다. 모든 양식과 제출 된 모든 데이터가 POST이어야하는 것처럼 응용 프로그램 전체에서 방법을 POST으로 설정하는 방법이 있는지 알고 싶습니다. 이 설정을 위해 사용하는 구성/변수는 무엇입니까? 즉, allowedMethods지도입니다 무엇 일반적으로
Priyank

답변

4

사전에
감사합니다;

static allowedMethods = [save: "POST", update: "POST", delete: "POST"] 

을 당신은 행동이 POST를 필요로하는 GET을 허용에 따라지도에서 액션 이름을 추가하거나 제거 할 수 있습니다 : 당신이 generate-controller 또는 generate-all 스크립트를 사용하는 경우 컨트롤러이있을 것이다. 당신은 기본 클래스 정의를 재사용하고이 방법으로 추가 할 서브 클래스를 기본 클래스에 넣고 허용 할 수 있습니다

은 잊기 쉽다 있도록, 그 기본 클래스를 확장해야합니다
static allowedMethods = BaseController.allowedMethods + [createUser: "POST"] 

. 따라서 필터를 사용하는 것이 더 나은 방법 일 수 있습니다. create-filters 명령으로 만들 수 있습니다. 당신은 행동의 명시 적 목록과 같은 필터를 가질 수있다 예를 들면 그래서

은 허용하지 :
def filters = { 
    postOnly(controller:'*', action: 'save|update|delete') { 
     before = { 
     if (!request.post) { 
      response.sendError(405) 
      return false 
     } 
     true 
     } 
    } 
} 

및 파이프로 구분 된 조치 이름에 추가

가 (당신이 컨트롤러 이름에 대해 동일한 작업을 수행 할 수 있습니다)을 와일드 카드도 사용할 수 있으므로 '만들기'로 시작하는 모든 작업을 추가 할 수 있습니다.

postOnly(controller:'*', action: 'save|update|delete|create*') { 
+0

해답 : Burt for the solution. 예,베이스 컨트롤러에서 필터로 옮길 계획이지만, 요청에있는 모든 매개 변수에 대해 새니 타이 저 플러그인 호출과 같은 기본 컨트롤러에 여전히 다른 호출이 있습니다. 지금은 baseController를 제거 할 수 없습니다. 무관 한 문제에서 누군가가 HDIV API를 grails에 성공적으로 통합했는지 알고 싶었습니다. –