2012-11-29 17 views
8

Yolda, yol parametrelerinde bir dizi parametre alan bir jax-rs hizmetim var. Bu parametreler URL'ler için değil uygun değerleri içeren dizeleri olabilir, bu yüzden şöyle java.net.UrlEncoder kullanarak istemci tarafında urlencoded edilir: Bu url supplier/group/param1/param2/param3 oluşturmak için kullanılanJax-rs otomatik kod çözme yolu parametresi

String param = URLEncoder.encode(o.toString(), "UTF-8"); 

. Bunlardan biri urlencoding nedeniyle değiştirilirse, örneğin sadece bir boşluk ise, serviste alınan dize bir + işaretidir.

@GET 
@Path("{supplierId}/{groupCode}/{groupId}") 
@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML}) 
public SupplierGroup getSupplierGroup(@PathParam("supplierId") BigDecimal supplierId, 
     @PathParam("groupCode") String groupCode, 
     @PathParam("groupId") BigDecimal groupId) { 
    //now groupCode is "+", not " " 
} 

Jaxrs'ın kodlanmış yol parametrelerini otomatik olarak çözmesini beklerim.

DÜZENLEME

: Test biraz daha ben alan %20 kullanarak gönderirken, diğer parametrelerin de çözmesi mümkün olduğunu keşfetti. PathParam javadoc gelen

+0

'URI.toAciisString'i kullanmak her zaman çalışmaz. @ Yegor256'nın cevabı daha sağlamdır - – SomethingSomething

cevap

11

Yol dosyalarının otomatik kodlaması beklendiği gibi çalışır. Sorun, %20'un URL dizisindeki boşlukları kodlamak için kullanılırken, + sorgu dizesini kodlamak için kullanılır (?). Yol ağları, URL’nin gerçekten parçalarıdır, bu yüzden% 20 kullanılmalıdır.

UrlEncoder.encode(...) yerine URI.toAsciiString() kullanmak ve farklı bölümleri geçmek, doğru olarak kodu çözülen geçerli bir URL verir.

3

Alıntı:

değeri bu Şifreli ek açıklama kullanarak devre dışı bırakılmadığı sürece URL deşifre olduğunu.

+2

işlevinin tamamlanmasından önce '@ Kodlanmış 'ek açıklamalarını tam olarak ekleyin! Ama bu olmaz ve ben onu engellemedim! –

+0

hangi JAX-RS uygulamasını kullanıyorsunuz? – yegor256

+0

Bu, gömülü bir openejb kabını çalıştıran testlerle ilgili bir sorundur. Bunu bir websitesi sunucusuna dağıtmak istiyoruz, ancak bir cxf uygulaması mı? –