2016-05-01 4 views
0

Я хотел бы правильно кодировать URL: http://a.b.c/apis/POST /foo/bar где POST /foo/bar должен быть закодирован как: POST%20%2Ffoo%2Fbar.Правильно кодировать распыление.http.Uri.Path?

Вот что я пробовал:

scala> import spray.http._ 
import spray.http._ 

scala> val base = Uri("http:/a.b.c") 
base: spray.http.Uri = http:///a.b.c 

scala> val path = Uri.Path("/apis/GET /foo/bar") 
path: spray.http.Uri.Path = /apis/GET%20/foo/bar 

scala> base.withPath(path) 
res0: spray.http.Uri = http:///apis/GET%20/foo/bar 

Но, выше показывает /foo/bar как дополнительные поля пути, а не как GET%20%2Ffoo%2Fbar.

Кроме того, я попытался:

scala> Uri.Path("/apis/" + java.net.URLEncoder.encode("GET /foo/bar", "UTF-8")) 
res1: spray.http.Uri.Path = /apis/GET+%2Ffoo%2Fbar 

Тем не менее, за https://stackoverflow.com/a/2678602/409976, пространство должно быть закодирован как %20 в пути части (как я понимаю). Кроме того, при использовании +, а не %20, веб-служба, к которой я обращаюсь, возвращает HTTP-500.

ответ

1
scala> Uri("http:/a.b.c").path/"apis"/"GET /foo/bar" 
res0: spray.http.Uri.Path = /a.b.c/apis/GET%20%2Ffoo%2Fbar