-
Notifications
You must be signed in to change notification settings - Fork 38.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
URIEditor prevents configuring URIs with encoded # sign #34262
Comments
To handle an encoded URI, the String s = "file:///C:/some/path/with/%23/in/it";
URI uri = new URIEditor(true).createURI(s);
assertThat(uri.toString()).isEqualTo(s); |
Yes, I know about the constructor but that doesn't help with the ConfigurationProperties binding because the binding uses a hard coded instance of URIEditor with But even if it is somehow possible to replace it there, I don't think interpreting RFC3986 compliant URIs erroneously should be the default. I get that the idea is to make it more tolerant to wrongly encoded URIs but I don't think that should go at the expense of supporting correct URIs. Though, I have no idea how to change this without introducing a breaking change... |
There is no way to change this without breaking someone else. Compatibility aside, what change did you actually have in mind? |
Well, as mentioned before, in a perfect world, I feel like a standard conform URI should always be interpreted correctly by default. But since that would be breaking, I guess the next best option would be to allow overriding the URIEditor instance when instantiating a new I don't really have a sufficient understanding of the classes involved here to outline a proposed change. |
Have you tried something like the below? @Bean
static CustomEditorConfigurer customEditorConfigurer() {
CustomEditorConfigurer configurer = new CustomEditorConfigurer();
configurer.setPropertyEditorRegistrars(new PropertyEditorRegistrar[] {
registry -> registry.registerCustomEditor(URI.class, new URIEditor(false))
});
return configurer;
} As far as I can tell, |
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. |
I have a ConfigurationProperties class containing a property of type
java.net.URI
.If I configure a value of
file:///C:/some/path/with/#/in/it
it (correctly) gets converted to a URI with a fragment component (which is not what I need in this case).However, if I configure the value as a correctly encoded URI like this
file:///C:/some/path/with/%23/in/it
, It (incorrectly) gets converted to this URI:file:///C:/some/path/with/%2523/in/it
.I don't see a way to configure this URI so it gets bound corrrectly.
The reason for this is that the
org.springframework.beans.propertyeditors.URIEditor
tries to guess which part of the URI is correctly encoded and which isn't which is a task that's impossible to do correctly for all cases.This has been improved upon several times #10673, #21123, #11743 but I think the approach is fundamentally flawed and the URIEditor should just not try to fix incorrectly encoded URIs by default.
The best workaround I could find was to use URLs instead of URIs.
The text was updated successfully, but these errors were encountered: