2012-01-09 10 views
5

aşağıdaki dinlenme URL'ler erişmek mümkün istiyorum:Jersey, JAX-RS'nin Yol ek açıklamalarında dolar imzasını destekliyor mu?

ilk URL çalışıyor sayılır. JAX-RS'in Jersey uygulaması kullanılarak $ count URL ile ilgili sorun yaşıyorum.

İşte kaynak kodu.

@Path("/helloworld") 
public class HelloWorldResource { 
    @GET 
    @Produces("text/plain") 
    public String getClichedMessage() { 
     return "Hello World!"; 
    } 

    @GET 
    @Path("\\$count") 
    @Produces("text/plain") 
    public String getClichedMessage(
      @PathParam("\\$count") String count) { 

     return "Hello count"; 
    } 
} 

Ben de @ yol ve @PathParam ama bu da işe yaramadı hem de "$ sayısı" denedim.

Not: Yukarıdaki tüm kodlardan dolar işaretini kaldırırsam, URL localhost için düzgün çalışır: 9998/helloworld/count. Ancak URL'de orada olmak için dolar işaretine ihtiyacım var çünkü bu bir OData yapımcısı uygulaması olacak.

+1

$ sign'in URL kodlaması spesifikasyonunda semantik anlam içerdiğinden eminim. Bunu kodlamadan normal bir URL'de kullanabileceğinizi hayal edemiyorum. – Perception

+1

Dolar işareti, kodlama yapılmadan bir URL'de kullanmak için yasaldır. Geriye dayalı bir protokol olan Açık Veri Protokolü'nde yoğun olarak kullanılmaktadır. Bkz. [Link] (http://www.odata.org/developers/protocols/uri-conventions) – Jerome

cevap

3

Bulunan cevap çalışmak için alınamadı aşağıdaki

@GET 
@Path("/{$count}") 
@Produces("text/plain") 
public String getClichedMessage(
     @PathParam("$count") String count) { 

    return "Hello count"; 
} 

Edit yapmalıyım/helloworld sonra değerini almak çalışıyorsanız. Dolar işareti bir karakter sınıfına yerleştirmek hile yaptı.

@GET 
@Path("{count : [$]count(/)?}") 
@Produces("text/plain") 
public String getClichedMessageCount(
     @PathParam("count") String count) { 

    return "Hello count"; 
} 

Yukarıdakiler aşağıdaki URL'lerle eşleşmektedir.

  • localhost: 9998/helloworld/$
  • localhost saymak: 9998/helloworld/$ count/
  • localhost: 9998/helloworld/$ saymak $ filtresi = vesaire
  • localhost:? 9998/MerhabaDünya/$ count /? $ filter = blah
+0

Çok teşekkür ederim! Bütün sabah bunu yapmaya çalışarak geçirdim. – Montecarlo

1

Dolar işaretleri URL'lerinizdeki özel karakterler, ve bu şekilde kodlanmış olması gerekir Korkarım:

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

aradığınız karakteri% 24 olduğu, eğer ilgilenirseniz java'da olsanız da, java.net.URI sınıfında okumaya değer olabilir. Jersey ile oynamamıştım, ama Java burada senin için zor işi yapabilecek kapasitede.

+1

Dolar işareti kodlamak zorunlu değildir. Dolar işareti, URI RFC, RFC 3986 [¹] (http: // tools) içinde ayrılmış bir karakter olarak tanımlanır.ietf.org/html/rfc3986#section-2.2 "RFC 3986 sec. 2.2"), bazı özel URI şemaları için özel bir anlamı vardır (özellikle "gopher:"). Http: URI şemasında özel bir anlamı yoktur. – MetaEd

+0

Rohaq, MetaEd'in doğru olduğuna inanıyorum. URL'lerde dolar işaretinin yoğun kullanımını sağlayan, dinlenme tabanlı bir protokol için [Açık Veri Protokolü] 'ne (http://www.odata.org/developers/protocols/uri-conventions) bakın. – Jerome

+0

Ah, tamam, o zaman benim hatam! Daha fazla sorunu önlemek için muhtemelen URI'yi doğru şekilde kodlamaya değer. – Rohaq

0

Sen @ yol

@GET 
@Path("/$count") 
@Produces("text/plain") 
public String getClichedMessage(
     @PathParam("\\$count") String count) { 

    return "Hello count"; 
} 

yanlış eğik çizgi kullanıyorsunuz Ayrıca bu PathParam kullanılacak doğru bir yol değildir. bunu bir $

@Path("count") // works 
@Path("/count") // works 
@Path("\\count") // does not work 
@Path("$count") // does not work 
@Path("/$count") // does not work 
+0

Merhaba Michael. Önerdiğin ilk kod örneğini denedim ama işe yaramadı. İkinci örnek, "$ count" dizgesini eşleştirmem gerektiğinden geçerli değildir. – Jerome

+0

@Jerome Haklısınız, eğik çizgiyi tamir ettikten sonra hala çalışmıyor. –