2013-11-20 2 views
5

저는 Scalatra 대신 Play Framework를 사용하도록 프로젝트를 리팩토링하고 세미콜론을 포함하는 쿼리 매개 변수에 문제가 있습니다. /url? filter = filter1 : val1; filter2 : val2 은 Scalatra의 filter = "filter1 : val1; filter2 : val2"에 매핑되지만 Play Framework에서는 filter = "filter1 : val1"에 매핑됩니다. 내가 찾은 유일한 해결책은 Escape semicolon route playframework 2.0.2이며 정규식을 사용하여 전체 매개 변수를 캡처하는 것이 좋습니다. 그러나 이는 경로 매개 변수에만 적용되고 매개 변수를 쿼리하는 것으로는 보이지 않습니다. 내 요구 사항 중 하나는 그 방법을 변경할 수 없다는 것입니다. 프런트 엔드는 API를 호출합니다. 즉, 쿼리 매개 변수를 경로 매개 변수로 변경할 수 없습니다.쿼리 매개 변수에서 플레이 프레임 워크 구문 분석 세미콜론

Play에서 검색어 매개 변수의 세미콜론을 구문 분석하지 않도록하려면 어떻게해야합니까? 즉, 'filter1'대신 'filter1; filter2'를 반환하겠습니까?

"request.rawQueryString"에서 정규식을 사용하여 쿼리 매개 변수를 수동으로 구문 분석 할 수 있지만 가능한 경우이를 피하고 싶습니다.

+0

혹시이 문제를 해결하기위한 방안을 찾으셨습니까 것입니까? 우리도 똑같은 문제를 겪고 있습니다. – cdeszaq

+0

@cdeszaq 내 대답보기 –

답변

3

우리가 생각만큼 부담이되지 않은 암시 클래스를 사용하여 쿼리 매개 변수를 구문 분석하는 것이었다 갔다 솔루션은

implicit class ParsedRawQueryString[+T](req: Request[T]) { 

    import java.net.URLDecoder.decode 

    def parsedRawQueryString = (for { 
    s <- decode(req.rawQueryString, "UTF-8").split('&') if s.contains('=') 
    } yield { 
    val index = s.indexOf('=') 
    s.substring(0, index) -> s.substring(index + 1) 
    }).toMap 
} 

def route = Action { 
    request => 
    val queryParams = request.parsedRawQueryString 
}