You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have defined the following request mapping: @RequestMapping(value = "/services/{serviceKey}/vos", method = RequestMethod.GET)
There is a problem if the value of {serviceKey} contains a "/", for example if {serviceKey}=http://example.com/foo
This makes sense of course since the requestmapping cannot easily know that the / is part of a PathVariable.
However, I would have assumed that if the URL is URL-encoded as "http%3A%2F%2Fexample.com%2Ffoo" this should not be a problem. But apparently this values for some reason cannot mapped properly because it reports:
"org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'dispatcher' processing GET request for [/core/services/http://example.com/foo/vos]"
If the already URL-encoded values is URL-encoded again to "http%253A%252F%252Fexample.com%252Ffoo", the mapping works:
"org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'dispatcher' processing GET request for [/core/services/http%3A%2F%2Fexample.com%2Ffoo/vos]"
So, my question is whether there is a way how to make Spring accept the URL encoded value "http%3A%2F%2Fexample.com%2Ffoo" as PathVariable or whether this is a bug.
This is a particularly pesky bug to figure out because the problem can be intermittent. I was passing a URL-encoded UUID from UUID.randomUUID(). Sometimes the UUID would include a / and then fail to map and the problem was far from obvious.
Lukas Hämmerle opened SPR-7919 and commented
I have defined the following request mapping:
@RequestMapping
(value = "/services/{serviceKey}/vos", method = RequestMethod.GET)There is a problem if the value of {serviceKey} contains a "/", for example if {serviceKey}=http://example.com/foo
This makes sense of course since the requestmapping cannot easily know that the / is part of a PathVariable.
However, I would have assumed that if the URL is URL-encoded as "http%3A%2F%2Fexample.com%2Ffoo" this should not be a problem. But apparently this values for some reason cannot mapped properly because it reports:
"org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'dispatcher' processing GET request for [/core/services/http://example.com/foo/vos]"
If the already URL-encoded values is URL-encoded again to "http%253A%252F%252Fexample.com%252Ffoo", the mapping works:
"org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'dispatcher' processing GET request for [/core/services/http%3A%2F%2Fexample.com%2Ffoo/vos]"
So, my question is whether there is a way how to make Spring accept the URL encoded value "http%3A%2F%2Fexample.com%2Ffoo" as PathVariable or whether this is a bug.
I tested this on Tomcat 6 and Jetty 7.
Affects: 3.0.3
Issue Links:
@RequestMapping
methods1 votes, 3 watchers
The text was updated successfully, but these errors were encountered: