web-dev-qa-db-fra.com

Regex dans le contrôleur de printemps

J'essaie de créer un filtre de demande qui ne sera utilisé que s'il correspond à un modèle de la lettre e, puis à un nombre. Cependant, je n'arrive pas à le faire fonctionner. Je reçois 400 erreurs à chaque fois que j'essaye quelque chose avec regex.

Si j'utilise simplement ce qui suit, cela "fonctionne" mais capture également les mappages qui n'ont pas de nombres dont je ne veux pas.

@RequestMapping(value = "e{number}",
            method = RequestMethod.GET)

J'ai essayé les combinaisons suivantes.

@RequestMapping(value = "e{number}",
            params = "number:\\d+",
            method = RequestMethod.GET)

@RequestMapping(value = "e{number:\d+}",
            method = RequestMethod.GET)

@RequestMapping(value = "/e{^\\+?\\d+\$}",
            method = RequestMethod.GET)

@RequestMapping(value = "/{^\\e+?\\d+\$}",
            method = RequestMethod.GET)
23
zmanc

Selon la documentation , vous devez utiliser quelque chose comme {varName:regex}. Il y a même un exemple:

@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\\d\\.\\d\\.\\d}{extension:\\.[a-z]+}")
  public void handle(@PathVariable String version, @PathVariable String extension) {
    // ...
  }
}
39
sam

Tu devrais utiliser:

 @RequestMapping("/e{number:\\d+})

Remarquez le "slash échappé" avant le \d spécificateur de chiffres.

2
Koen van Dijk