2016-07-18 12 views
1

Ich habe diese REST-Ressource:Wie kann ich Zeichenfolge Param mit Schrägstrich übergeben?

@GET 
@Path("{business},{year},{sample}") 
@Produces(MediaType.APPLICATION_JSON) 
public Response getSample(
     @PathParam("business") String business, 
     @PathParam("year") String year, 
     @PathParam("sample") String sampleId { 
    Sample sample = dao.findSample(business, year, sampleId); 
    return Response.ok(sample).build(); 
} 

sample param Schrägstrich enthält: 6576/M982, zum Beispiel.

Ich rufe es mit http://ip:port/samples/2000,2006,6576/M982 aber funktioniert natürlich nicht.

Ich habe auch versucht mit http://ip:port/samples/2000,2006,6576%2FM982, Codierung der Schrägstrich als %2F, funktioniert aber auch nicht, es erreicht nicht den Endpunkt.

EDIT

I Retrofit bin mit dem Endpunkt zu nennen und ich dies tun:

@GET("/samples/{business},{year},{sampleId}") 
Observable<Sample> getSampleById(
     @Path("business") String business, 
     @Path("year") String year, 
     @Path(value = "sampleId", encoded = true) String sampleId); 

Mit encoded = true, aber immer noch nicht funktioniert.

+0

Sie müssen es "URLEncode". – EJP

+0

Haben Sie "@GET ("/samples/{business}% 2C {Jahr}% 2C {BeispielId} ") versucht? –

Antwort

2

Reservierte Zeichen wie , und / müssen URL-codiert sein.

  • , ist codiert als %2C
  • / als %2F codiert wird

http://ip:port/samples/2000%2C2006%2C6576%2FM982 Versuchen.


Die RFC 3986 definiert den folgenden Satz von reserved characters, die als Trennzeichen verwendet werden können. Daher benötigen sie URL-Codierung:

:/? #/[ ]/@ ! $ & ' () * + , ; = 

Unreserved characters keine URL-Codierung erfordern:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
a b c d e f g h i j k l m n o p q r s t u v w x y z 
0 1 2 3 4 5 6 7 8 9 - _ . ~ 

Wenn , URL-Codierung für Sie nicht eine gute Alternative ist, könnten Sie erwägen Abfrageparameter verwenden. Ihr Code wird sein wie:

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public Response getSample(@QueryParam("business") String business, 
          @QueryParam("year") String year, 
          @QueryParam("sample") String sampleId { 
    ... 
} 

Und Ihre URL wird wie http://ip:port/samples?business=2000&year=2006&sample=6576%2FM982 sein.

Bitte beachten Sie, dass die / immer noch URL-codiert sein muss.