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("/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"));