web-dev-qa-db-ja.com

{}ブレース付きのSpring MVC @Path変数

スプリングブートを使用してアプリケーションを開発しています。 In REST controller私はパス変数を使用することを好みます(@PathVariabaleアノテーション)。私のコードはパス変数を取得していますが、それは{} URLにあるように中括弧に続きます。この問題を解決するために私に提案してください

@RequestMapping(value = "/user/item/{loginName}", method = RequestMethod.GET)
public void getSourceDetails(@PathVariable String loginName) {
    try {
        System.out.println(loginName);
        // it print like this  {john}
    } catch (Exception e) {
        LOG.error(e);
    }
}

URL

http://localhost:8080/user/item/{john}

コントローラーに出力

{ジョン}

23

つかいます http://localhost:8080/user/item/john代わりにリクエストを送信します。

Springにパス変数loginNameに「{john}」の値を与えるため、Springは「{}」で取得します

Web MVCフレームワーク

URIテンプレートパターン

URIテンプレートを使用すると、@ RequestMappingメソッドでURLの選択した部分に簡単にアクセスできます。

URIテンプレートは、URIに似た文字列であり、1つ以上の変数名を含んでいます。 これらの変数に値を代入すると、テンプレートはURIになります。 URIテンプレート用に提案されているRFCは、URIのパラメーター化方法を定義しています。たとえば、URIテンプレート http://www.example.com/users/ {userId}には変数userIdが含まれます。 変数に値fredを割り当てると、 http://www.example.com/users/fred

Spring MVCでは、メソッド引数で@PathVariableアノテーションを使用して、URIテンプレート変数の値にバインドできます。

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
 public String findOwner(@PathVariable String ownerId, Model model) {
     Owner owner = ownerService.findOwner(ownerId);
     model.addAttribute("owner", owner);
     return "displayOwner"; 
  }

URIテンプレート「/ owners/{ownerId}」は、変数名ownerIdを指定します。コントローラーがこの要求を処理すると、ownerIdの値は、URIの適切な部分にある値に設定されます。たとえば、要求が/ owners/fredに着信すると、ownerIdの値はfredになります。

43
Jaskey