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

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

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

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

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

正規表現

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

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

view raw
RestController.java
hosted with ❤ by GitHub

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

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

ワイルドカード

@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

view raw
RestController.java
hosted with ❤ by GitHub

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

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

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

https://stackoverflow.com/questions/3686808/spring-3-requestmapping-get-path-value

https://stackoverflow.com/questions/12516969/spring-mvc-getting-pathvariables-containing-dots-and-slashes

https://www.baeldung.com/spring-slash-character-in-url

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA