RESTEAsyの詳細
10668 ワード
RESTEAsyはJBossのオープンソースプロジェクトで、RESTful Web ServicesとRESTful Javaアプリケーションの構築に役立つさまざまなフレームワークを提供しています.JAX-RS仕様の完全な実装であり、JCP認証に合格しています.
JBOSSのプロジェクトとしては、もちろんJBOSSアプリケーションサーバとうまく統合できます.ただし、JDK 5以降のサーブレットコンテナでも実行できます.RESTEAsyはまた、EJB、Seam、Guice、Spring、Spring MVCとの統合を容易にするRESTEAsy JAX-RSクライアント呼び出しフレームワークを提供し、クライアントとサーバ側でGZIP解凍を自動的に実現することをサポートします.
一般的な注釈
@Path and @GET, @POST
クラスまたはメソッドは@Path注記またはHTTPメソッドの注記が存在するメソッドにHTTPメソッドの注記がない場合はJAXRSResourceLocators@Path注記と呼び正規表現マッピングをサポートする
たとえば、@Path("/resources/{var}/stuff")`は、次の要求に一致します.GET/resources/foo/stuff GET/resources/bar/stuffは一致しません.GET/resources/a/bunch/of/stuff
@PathParam
@PathParamは、基本タイプ、文字列、または構築メソッドパラメータとして1つの文字列を持つJavaオブジェクト、またはパラメータとして文字列を持つ静的メソッドvalueOfのJavaオブジェクトにマッピングできるパラメータ注記です.
@Path注記では、@PathParam注記に対応するパラメータを使用できます.
@PathParam注記は、URLの後ろにある複数のパラメータを内蔵javaxにマッピングすることもできる.ws.rs.core.PathSegmentオブジェクト
@QueryParam
@HeaderParam
@HeaderParam注記:httpヘッダからFrom変数を取得した値をfromパラメータにマッピングするなど、HTTPヘッダのパラメータをメソッドの呼び出しにマッピングします.
@MatrixParam
@CookieParam
@FormParam
@Form
@FormParamは、フォームフィールドをメソッドのパラメータにバインドするだけで、@Formはフォームをオブジェクトにバインドできます.
@DefaultValue
デフォルト値を設定します.
@Encodedと@Encoding
@*Params注記のパラメータを符号化します.
@Context
注記を使用すると、次のオブジェクトをインスタンスに注入できます.
javax.ws.rs.core.HttpHeaders, javax.ws.rs.core.UriInfo javax.ws.rs.core.Request javax.servlet.HttpServletRequest javax.servlet.HttpServletResponse javax.servlet.ServletConfig javax.servlet.ServletContext javax.ws.rs.core.SecurityContext
@Producesと@Consumes
@Consumes注記は、対応するメソッド処理のcontent-type要求タイプを定義します.
@GZIP
CORS
Content-Range Support
JBOSSのプロジェクトとしては、もちろんJBOSSアプリケーションサーバとうまく統合できます.ただし、JDK 5以降のサーブレットコンテナでも実行できます.RESTEAsyはまた、EJB、Seam、Guice、Spring、Spring MVCとの統合を容易にするRESTEAsy JAX-RSクライアント呼び出しフレームワークを提供し、クライアントとサーバ側でGZIP解凍を自動的に実現することをサポートします.
一般的な注釈
@Path and @GET, @POST
@Path("/library")
public class Library {
@GET
@Path("/books")
public String getBooks() {...}
@GET
@Path("/book/{isbn}")
public String getBook(@PathParam("isbn") String id) {
// search my database and get a string representation and return it
}
@PUT
@Path("/book/{isbn}")
public void addBook(@PathParam("isbn") String id, @QueryParam("name") String name) {...}
@DELETE
@Path("/book/{id}")
public void removeBook(@PathParam("id") String id {...}
}
クラスまたはメソッドは@Path注記またはHTTPメソッドの注記が存在するメソッドにHTTPメソッドの注記がない場合はJAXRSResourceLocators@Path注記と呼び正規表現マッピングをサポートする
@Path("/resources")
public class MyResource {
@GET
@Path("{var:.*}/stuff")
public String get() {...}
}
たとえば、@Path("/resources/{var}/stuff")`は、次の要求に一致します.GET/resources/foo/stuff GET/resources/bar/stuffは一致しません.GET/resources/a/bunch/of/stuff
@PathParam
@PathParamは、基本タイプ、文字列、または構築メソッドパラメータとして1つの文字列を持つJavaオブジェクト、またはパラメータとして文字列を持つ静的メソッドvalueOfのJavaオブジェクトにマッピングできるパラメータ注記です.
@GET
@Path("/book/{isbn}")
public String getBook(@PathParam("isbn") ISBN id) {...}
public class ISBN {
public ISBN(String str) {...}
}
public class ISBN {
public static ISBN valueOf(String isbn) {...}
}
@Path注記では、@PathParam注記に対応するパラメータを使用できます.
@GET
@Path("/aaa{param:b+}/{many:.*}/stuff")
public String getIt(@PathParam("param") String bs, @PathParam("many") String many) {...}
@PathParam注記は、URLの後ろにある複数のパラメータを内蔵javaxにマッピングすることもできる.ws.rs.core.PathSegmentオブジェクト
@QueryParam
@GET
public String getBooks(@QueryParam("num") int num) {
...
}
@HeaderParam
@HeaderParam注記:httpヘッダからFrom変数を取得した値をfromパラメータにマッピングするなど、HTTPヘッダのパラメータをメソッドの呼び出しにマッピングします.
@GET
public String getBooks(@HeaderParam("From") String from) {
...
}
@PUT
public void put(@HeaderParam("Content-Type") MediaType contentType, ...)
@MatrixParam
@GET
public String getBook(@MatrixParam("name") String name, @MatrixParam("author") String author) {...}
@CookieParam
@GET
public String getBooks(@CookieParam("sessionid") int id) {
...
}
@GET
publi cString getBooks(@CookieParam("sessionid") javax.ws.rs.core.Cookie id) {...}
@FormParam
@Path("/")
public class NameRegistry {
@Path("/resources/service")
@POST
public void addName(@FormParam("firstname") String first, @FormParam("lastname") String last) {...}
}
@Path("/")
public class NameRegistry {
@Path("/resources/service")
@POST
@Consumes("application/x-www-form-urlencoded")
public void addName(@FormParam("firstname") String first, MultivaluedMap form) {...}
}
@Form
@FormParamは、フォームフィールドをメソッドのパラメータにバインドするだけで、@Formはフォームをオブジェクトにバインドできます.
public static class Person{
@FormParam("name")
private String name;
@Form(prefix = "invoice")
private Address invoice;
@Form(prefix = "shipping")
private Address shipping;
}
public static class Address{
@FormParam("street")
private String street;
}
@Path("person")
public static class MyResource{
@POST
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String post(@Form Person p){
return p.toString();
}
}
@DefaultValue
デフォルト値を設定します.
@GET
public String getBooks(@QueryParam("num") @DefaultValue("10") int num) {...}
@Encodedと@Encoding
@*Params注記のパラメータを符号化します.
@Context
注記を使用すると、次のオブジェクトをインスタンスに注入できます.
javax.ws.rs.core.HttpHeaders, javax.ws.rs.core.UriInfo javax.ws.rs.core.Request javax.servlet.HttpServletRequest javax.servlet.HttpServletResponse javax.servlet.ServletConfig javax.servlet.ServletContext javax.ws.rs.core.SecurityContext
@Producesと@Consumes
@Consumes注記は、対応するメソッド処理のcontent-type要求タイプを定義します.
@GZIP
@Path("/")
public interface MyProxy {
@Consumes("application/xml")
@PUT
public void put(@GZIP Order order);
}
CORS
CorsFilter filter = new CorsFilter();
filter.getAllowedOrigins().add("http://localhost");
Content-Range Support
@Path("/")
public class Resource {
@GET
@Path("file")
@Produces("text/plain")
public File getFile()
{
return file;
}
}
Response response = client.target(generateURL("/file")).request()
.header("Range", "1-4").get();
Assert.assertEquals(response.getStatus(), 206);
Assert.assertEquals(4, response.getLength());
System.out.println("Content-Range: " + response.getHeaderString("Content-Range"));