Open
Description
I have a HttpExchange client for e.g. BitBucket server, where the client looks like this:
public interface BitbucketClient {
@GetExchange("/projects/{project}/repos/{repo}/raw/{path}?at={ref}")
String raw(@PathVariable String project, @PathVariable String repo, @PathVariable String ref, @PathVariable String path);
}
path
parameter can contain slashes (/
) - because it is a path inside a repo (e.g. src/main/resources/file.txt
) so encoding it breaks the API.
It would be good to have a param in PathVariable that would disable encoding (e.g. @PathVariable(encode = false)
String path).
(this was reported earlier at #32041 but it stalled)
Metadata
Metadata
Assignees
Labels
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
rstoyanchev commentedon Jun 11, 2025
It is not easy to do as proposed. Method parameter annotations are intentionally shared for client and server side (it's an HTTP Service contract neutral to either), but this would make it asymmetric. Also, no way to set per variable encoding options at the level of
UriComponentsBuilder
.One way to do it is by passing a
UriBuilderFactory
that's configured accordingly, e.g. to encode the template only, or not at all (seeencodingMode
property onDefaultUriBuilderFactory
). There is more context (and snippets) in the issue where support for this parameter was added #30935 (the docs don't cover this, something to correct).spring-projects-issues commentedon Jun 20, 2025
If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.