KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a REST API which is fairly typical, except that the id's of resources are not integers, but strings, which often contain / characters. So if a customer's id is string/with/slashes then the URI for that customer should be http://localhost/customers/string%2Fwith%2Fslashes . When returning a list of customers, I want to construct that URI with a UriBuilder so I can put it in the href of ATOM-style link elements. But it doesn't quite work; here's a small test class that shows what I mean: @Path("/customers") public class JerseyTest { @Path("{id}") public Customer getCustomer(@PathParam("{id}") String id) { return null; } public static void main(String[] args) { buildURI("string#with#hashes"); // => http://localhost/customers/string%23with%23hashes buildURI("string/with/slashes"); // => http://localhost/customers/string/with/slashes } public static void buildURI(String id) { UriBuilder builder = UriBuilder.fromUri("http://localhost"); builder.path(JerseyTest.class).path(JerseyTest.class, "getCustomer"); URI uri = builder.build(id); System.out.println(uri); } } The # 's get encoded as I would expect but the / 's don't. I tried using builder.build(URLEncoder.encode(id)) instead, but then the UriBuilder encodes the % 's so you get .../string%252Fwith%252Fslashes ! It seems inconsistent to me that it encodes # and % but not / , but I suspect there is a good reason for it which I am not seeing. So my question is: How can I get UriBuilder to give me .../string%2Fwith%2Fslashes , which is the URI that causes Jersey to call getCustomer with id equal to st
Tags (comma-separated)
Save Edits
Cancel