Spring, REST a e-mail jako parametr

Denně jako vývojáři řešíme jeden problém za druhým. O většině si nejspíš myslíte, že nestojí za samostatný článek na blog (což není pravda). Mezi takové, které jsem odsunul do pozadí, by patřil i tento, pokud by se ovšem na to samém nepozastavil i kolega. Jde o to, že když používáte Spring spolu s RESTovým url a chcete používat e-mail jako parametr,
například http://localhost:8080/users/jmeno.prijmeni@firma.domena, tak kód vyžaduje drobnou úpravu.
Při implementaci překvapí, že místo e-mailu dostanete jen substring. Jsme empiričtí programátoři, takže čteme dokumentaci, jen když nám něco nejde. Ale kde a co v tomto případě hledat? Klíčem je anotace @RequestMapping, konkrétně se tam mluví o @PathVariable
By default, the URI template will match against the regular expression [^.]
Vidíte to tam? Bonmot praví, že máme-li problém a rozhodneme se ho řešit regulárním výrazem, máme problémy rázem dva.
Řešení
| import org.springframework.stereotype.Controller; | |
| import org.springframework.web.bind.annotation.PathVariable; | |
| import org.springframework.web.bind.annotation.RequestMapping; | |
| import org.springframework.web.bind.annotation.RequestMethod; | |
| import org.springframework.web.bind.annotation.ResponseBody; | |
| @Controller | |
| public class UserController { | |
| @RequestMapping(value = "/users/{email:.+}", method = RequestMethod.GET) | |
| public @ResponseBody User getUserDetails(@PathVariable("email") String email) { | |
| //TODO | |
| return null; | |
| } | |
| } |