Monday, April 20, 2015

Spring @PathVariable mapping incomplete path when dots are included

Spring @PathVariable mapping incomplete path when dots are included

In all my projects this happens at least once, and I'm surprised over and over again: a controller will not map just anything to @PathVariable by default. Contrary to intuition, the annotation's argument is a regular expression which excludes some characters per default. For instance the url

http://localhost:8080/myapp/api/user/testuser@example.com

when mapped to a controller:

@RequestMapping(value = "/getProxyUserDetails/{email}")
ModelAndView findUserByEmail(@PathVariable("email") String email){

// email = testuser@example

 
}
will result in "testuser@example" ... missing the ".com" suffix.

The correct mapping is:

@RequestMapping(value = "/getProxyUserDetails/{email:.*}")
ModelAndView findUserByEmail(@PathVariable("email") String email){

// email = testuser@example.com

 
}

No comments:

Post a Comment