Spring REST APIでスラッシュを含むパスパラメータ取得方法

Spring REST APIでスラッシュを含むパスパラメータ取得方法

パスパラメータにスラッシュを含む場合の取得方法です。

パスパラメータにスラッシュを含むケースですが、以下のようなイメージです。

http://localhost:8080/test/tmp/a.txt?lang=en

このURLの/tmp/a.txtがパスパラメータになる場合の取得方法です。

正規表現

@RequestMappingで正規表現が使えるので、正規表現を使用してみます。

  @RequestMapping("/test/{resourcepath:^[A-Za-z0-9_@./#&+-]*$}")
  public ResponseEntity<?> handle(@PathVariable String resourcepath) {

このように{変数名:正規表現}とすることでパスパラメータに正規表現を適用する事ができます。

但し上記のように正規表現にスラッシュを含めると意図した通りに動作しません。

ワイルドカード

@RequestMappingで**というワイルドカードが使用できますので、今度はワイルドカードを使用してみます。

ワイルドカードですと、スラッシュを含むパスパラメータを取得することが可能です。

  @RequestMapping("/test/**")
  public ResponseEntity<?> handle(
  HttpServletRequest request,
  @RequestParam(name = "lang", defaultValue = "ja") final String lang) {
  String uri = null;
  uri = request.getRequestURI(); // uri=test/a/b/c
  uri = ServletUriComponentsBuilder.fromCurrentRequestUri().toUriString(); // uri=test/a/b/c
  // ...
  // curl -X GET http://localhost:8080/test/hoge/a.jpg?lang=en

HttpServletRequestのgetRequestURI()メソッドでURIが取得できました。

ServletUriComponentsBuilder.fromCurrentRequestUri().toUriString()では、http~から?の手前までが取得ができます。

クエリパラメータもlang変数で取得できます。

参考サイト

Attention Required! | Cloudflare
Attention Required! | Cloudflare
Just a moment...

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました