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; | |
} | |
} |