2013-11-20 12 views
5

Bir projeyi Scalatra yerine Oynatma Çerçevesini kullanacak şekilde yeniden onaylıyorum ve noktalı virgül içeren sorgu parametrelerine sorun yaşıyorum. /url? Filter = filter1: val1; filter2: val2 , Scalatra'da filter = "filter1: val1; filter2: val2" ile eşlenir, ancak Play Framework'de filtre = "filter1: val1" ile eşlenir. Bulduğum tek çözüm, Escape semicolon route playframework 2.0.2, tüm parametreyi yakalamak için bir regex kullanılmasını önerir, ancak bu yalnızca yol parametrelerine uygulanabilir ve parametreler sorgulanmıyor gibi görünür - benim gereksinimlerimden biri, ön uç api çağırır, yani bir sorgu parametresini bir yol parametresine değiştiremiyorum.Sorgu parametrelerinde noktalı virgülleri ayrıştırma çerçevesini çalma

Oynatmaya, sorgu parametrelerindeki noktalı virgülleri, yani "filter1" yerine "filter1; filter2" döndürmek için değil;

"request.rawQueryString" üzerinde bir regex kullanarak sorgu parametrelerini el ile ayrıştırabilirim, ancak mümkünse bunu önlemek isterim.

+0

Hiç bu bir çözüm buldunuz olurdu? Aynı konuyla karşılaşıyoruz. – cdeszaq

+0

@cdeszaq Aşağıdaki cevabımı görün –

cevap

3

biz düşündüğümüz kadar zahmetli değildi örtük sınıfını kullanarak sorgu parametrelerinin ayrıştırmak için oldu gitti çözüm

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 
}