概要
-
@RequestMapping
で定義されたURIのパスパラメータ(プレースホルダー)は{パラメータ名:正規表現}
の形でバリデーションできる。 - たとえば、
@RequestMapping(path="/hello/{name}")
のようにURIが定義されていて、name
には半角英字以外は受け付けないようにしたいときは、@RequestMapping(path="/hello/{name:[a-zA-Z]+}")
と書く。 - 正確には、URIのプレースホルダーの構文を取り決めている。
前提
- Spring Bootで作ったREST APIを想定。
-
@RestContoller
が付与されたコントローラクラスで使用される@RequestMapping
のpath属性(またはvalue属性)で構文を決める。
環境
- Spring Framework 5.1.2
- Spring Boot 2.1.0
- Java 1.8
書き方の例
URIのプレースホルダーに半角英字を入力し、"hello, {入力した半角英字}"
を返すAPI。
HelloController.java
@RestController
public class HelloController {
@RequestMapping(path = "/hello/{name:[a-zA-Z]+}", method = RequestMethod.GET)
public String hello(@PathVariable String name) {
return "hello, " + name;
}
}
実行例。
bash-3.2$ curl -X GET http://localhost:8080/hello/Freddie
hello, Freddie
誤った構文の入力があった場合は、404リソース未検出扱いになる。デフォルトのエラーレスポンスでは以下のとおり。
bash-3.2$ curl -X GET http://localhost:8080/hello/0123
{"timestamp":"2018-11-20T16:02:56.401+0000","status":404,"error":"Not Found","message":"No message available","path":"/hello/0123"}
他にも、たとえば3桁の半角数字の構文にしたい場合は@RequestMapping(path="/hello/{id:\\d{3}}")
等、目的の構文を表す正規表現を用いればよい。
※ 念のため、¥¥d
では正しく動作しない。\\d
と書く。
参考