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)
Comment From: rstoyanchev
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 (see encodingMode
property on DefaultUriBuilderFactory
). 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).
Comment From: spring-projects-issues
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.
Comment From: spring-projects-issues
Closing due to lack of requested feedback. If you would like us to look at this issue, please provide the requested information and we will re-open the issue.