2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

@RequestMappingでパスパラメータをバリデーションする

Posted at

概要

  • @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と書く。

参考

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?