2015-01-19 13 views
1

스프레이 라우팅을 사용하여 다른 HTTP 메소드를 사용하여 라우트를 일치 시키려고 시도하지만 GET 요청을 수행하면 실제로 DELETE, PUT 및 GET을 수행합니다. deleteput은 HTTP DELETE 또는 HTTP PUT이 아닌 모든 요청을 거부한다고 생각합니다.스프레이 라우팅이 HTTP 메소드와 일치하지 않습니다.

이 내 기본 코드입니다 :

Hello from DELETE 
Hello from PUT 
Hello from GET 

내가 어떤 반환 전화 또는 뭔가를 놓치고 있습니까 : 나는 응용 프로그램의 인쇄를 볼 수있는 GET 요청을 실행할 경우

path(Segment ~ Slash.?) { id => 
    delete { 
    println("Hello from DELETE") 
    //do stuff for delete 
    complete("done for DELETE") 
    } ~ 
    put { 
    println("Hello from PUT") 
    //do stuff for put 
    complete("done for PUT") 
    } ~ 
    get { 
    println("Hello from GET") 
    //do stuff for get 
    complete("done for GET") 
    } 
} 

?

답변

4

아니요, 코드가 (거의) 맞습니다.

문제는 메서드 일치 프로그램에 있지만 추출 ("매개 변수"또는 "세그먼트"와 같은 "추출"지시어 중 하나)에 살지 않는 코드가 모두 실행된다는 것입니다. 타임스. 귀하의 경우에는

올바르게 경로 추출기와 일치하지만, 모두 삭제 넣어 얻을에 대한 그 후 경로는 실행 등

이에 대한 솔루션이 GET/넣어 아래의 " dynamic"키워드 권한을 추가하는 것입니다

단점은 당신이 약간의 성과를 잃는다는 것입니다. 그것은

get { 
    path(...) { 
    ... 
    } 
} 
+0

이 설명 주셔서 감사에서

path(...) { get { dynamic { ... } } } 

또는, 메소드 정규 최상위 수준이되도록 코드를 개편하고, 경로 추출 할 수 있습니다. 나는 그것을 지금 일하고있다 :) – hveiga