JAX-RS @Path URIにマッチする例

JAX-RSでは、 `@ Path`を使用してURIパターンをJavaメソッドにバインドできます。どのように動作するかは、次の例を参照してください。

1.通常のURIマッチング

@Pathアノテーションと一致する通常のURIを参照してください。

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;

@Path("/users")
public class UserRestService {

    @GET
    public Response getUser() {

        return Response.status(200).entity("getUser is called").build();

    }

    @GET
    @Path("/vip")
    public Response getUserVIP() {

        return Response.status(200).entity("getUserVIP is called").build();

    }
}

URIパターン: " /users "

getUser is called

URIパターン: " /users/vip "

getUserVIP is called

2. URIマッチングとパラメータ

中括弧 "\ {"と中かっこ "}"内の値はパラメータを表し、 `@ PathParam`でアクセスできます。

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("/users")
public class UserRestService {

    @GET
    @Path("{name}")
    public Response getUserByName(@PathParam("name") String name) {

        return Response.status(200)
            .entity("getUserByName is called, name : " + name).build();

    }

}

URIパターン: " /users/mkyong "

getUserByName is called, name : mkyong

URIパターン: " /users/abcdefg "

getUserByName is called, name : abcdefg

3. URIマッチングと正規表現

`@ Path`は正規表現と一致する複合URIを次の式でサポートします:

{" variable-name[":" regular-expression]"}
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("/users")
public class UserRestService {

    @GET
    @Path("{id : \\d+}")//support digit only
    public Response getUserById(@PathParam("id") String id) {

       return Response.status(200).entity("getUserById is called, id : " + id).build();

    }

    @GET
    @Path("/username/{username :[a-zA-Z][a-zA-Z__0-9]}")
    public Response getUserByUserName(@PathParam("username") String username) {

       return Response.status(200)
        .entity("getUserByUserName is called, username : " + username).build();

    }

    @GET
    @Path("/books/{isbn : \\d+}")
    public Response getUserBookByISBN(@PathParam("isbn") String isbn) {

       return Response.status(200)
        .entity("getUserBookByISBN is called, isbn : " + isbn).build();

    }

}

URIパターン: " /users/999 "

getUserById is called, id : 999

URIパターン: " /users/123456 "

getUserById is called, id : 123456

"[a-zA-Z][a-zA-Z 0-9]、最初の文字が必要[" a-zA-Z]"と一致しない" /users/username/aaa "、2文字目に"[a-zA-Z 0-9]"が必要です。

Could not find resource for relative :/users/username/aaa

URIパターン: " /users/username/a9 "

getUserByUserName is called, username : a9

URIパターン: " users/books/999 "

getUserBookByISBN is called, isbn : 999

ソースコードをダウンロードする

ダウンロードする - リンク://wp-content/uploads/2011/07/JAX-RS-Path-URI-Matching-Example.zip[JAX-RS-Path-URI- Matching-Example.zip](6 KB)