普段、こういう使い方をしないので、URI のパスの宣言に正規表現が使えることを初めて知りました...。
URI patterns - Web on Servlet Stack
@GetMapping("/users/{id:[0-9]{5}}") // 数字5桁 public String get(@PathVariable long id) { // }
また、1つのパスの中身は分解して変数に抽出できる。
@GetMapping("/users/{prefix:[a-z]{1}}{id:[0-9]{5}}") // 英小文字1桁 + 数字5桁 public String get(@PathVariable String prefix, @PathVariable long id) { // }
固定の prefix の場合はこういう書き方も可。例えば、内部では数字で扱うけど、外部からは prefix 付きでアクセスされるような要件があるときに便利かもしれない。
@GetMapping("/users/user{id:[0-9]{5}}") // `user` + 数字5桁 public String get(@PathVariable long id) { // }
あと、同階層の URI のパスに応じて Controller のメソッド呼び出しが分けられる。
@GetMapping("/users/user{id:[0-9]{5}}") public String get1(@PathVariable long id) { // /users/user12345 はこっちに入る } @GetMapping("/users/admin{id:[0-9]{5}}") public String get2(@PathVariable long id) { // /users/admin12345 はこっちに入る }
今までは1つのメソッドで受けて、パラメータを判定して処理を分岐したりしてたかもしれないけど、Controller のメソッドで分岐できるならその方がアプリケーションコードはシンプルになりそう。