2015-12-17 5 views
6

Restfulサービスを初めて利用しています。私はコードを通過してこの行を見つけました@Pathアノテーション内のコロン(:)の意味

@GET 

@Path("{image:image/.*}") 

誰かが上記の構文の意味と使い方を説明できますか?

+0

正規表現のちょうど一部が使用されています... –

+0

@JunedAhsan少なくとも「image:」プレフィックスではありません。 –

答えて

4

@Path表記法は、パスに一致する正規の文字列またはパターンに一致する正規表現をサポートします。あなたのケースでは

@Path("{image:image/.*}") 

だけで基本的に画像/何に変換した画像のような任意のパターン/.*、と

パスのparam {画像}のパターンに一致しているようだ、何がここにいません「何か」という言葉を指すが、その文字通りの意味、すなわち有効なテキストを指す。

訂正: は完全な詳細について@Sotirios Delimanolisの答えを参照してください。訂正入力のためのおかげです。

3

この表記法はURIパステンプレートとして知られており、documentationに記載されています。

新しいテンプレート変数は、角括弧{}で宣言して定義します。 JX-RS環境は、対応するパスセグメントを要求されたURIから、宣言された@PathParamハンドラメソッドパラメータにバインドします。

ドキュメントからURIパステンプレートは、URI 構文内に埋め込まれた変数とのURIです。これらの変数は、 リソースが置換されたURIに基づいて要求に応答するために、実行時に置換されます。 変数は中括弧({および}で示されます。例えば、 @Path注釈以下 を見て:例のこの種の

@Path("https://stackoverflow.com/users/{username}") 

、ユーザーが自分の名前を入力するように促され、 、その後に要求に応答するように構成されたJAX-RS Webサービス このURIパステンプレートが応答します。 「ガリレオ」のWebサービスは、次のURLに応答し、ユーザがタイプ ユーザー名たとえば、ユーザ名の値を取得するには

http://example.com/users/Galileo 

@PathParam注釈は上 を使用することができますリクエストメソッドの方法パラメータ、 次のコード例に示されるように:ドキュメントは、次に表記するための構文を指定するために行く

@Path("https://stackoverflow.com/users/{username}") 
public class UserResource { 

    @GET 
    @Produces("text/xml") 
    public String getUser(@PathParam("username") String userName) { 
     ... 
    } 
} 

デフォルトでは

、URI変数は正規表現 「[^ /] +と一致する必要がありますか?この変数は、変数名後の異なる 正規表現を指定することにより、カスタマイズすることができる。たとえば、ユーザー 名が変数 にデフォルトの正規表現をオーバーライドし、小文字と大文字の英数字 文字のみから構成されなければならない場合は、「。定義:

@Path("users/{username: [a-zA-Z][a-zA-Z_0-9]}") 

この例では、ユーザ名変数は1つの大文字または小文字と0個以上の 英数字とアンダースコア文字で始まる のみのユーザー名と一致する場合は、ユーザー名 D。そのテンプレートと一致しない場合、404(Not Found)応答がクライアントに として送信されます。

だからあなたの例では、

@Path("{image:image/.*}") 

正規表現

image/.* 
に一致するセグメントを含むimageという名前URIテンプレート変数を定義する

ため、要求のためのあなたのアノテーション付きメソッドを使用しますJAX-RS環境一致するURIへ

http://somehost.com/context-path/image/[anything] 

おそらく、あなたのメソッドは、パラメータ

@Path("{image:image/.*}") 
public Response handle(@PathParam("image") String path) { /* handling */ } 

path"image/[anything]"の価値を持っているでしょうだろう。

関連する問題