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