読書会(JavaによるRESTfulシステム構築)第2回議事録
[ 戻る ]
2011年06月25日 土曜日
参加者 高橋(徹) 門脇 高橋(智) 天野 松永 根本 村山 岩室 吉本 桜井 今井 遠藤 根本(記)
P33 顧客の更新 より
3.1.3 JAX-RSとJavaインターフェイス
P37 下記部分の「すべての再定義」とは何の標準で決まったことなのか?
JAX-RSレイヤーか?
JAX-RSの仕様を確認、クラス単位で必要だからか?
----------------------------------------------------
public class CustomerResourceService implements CustomerResource {@POST
@Consumes("application/xml;charset=utf-8") public Response createCustomer(InputStream is) {
... 実装 ...
}
この例では、 1つの特定のメソッドに対してインターフェイスで定義されたメタデータをオーバライド することになる。メソッドに対するメタデータをオーバライドする場合、変更対象が 1つだけだとしても、 そのメソッドに対するすべてのアノテーションメタデータの再指定が必要になる。
----------------------------------------------------
P42 下記web.xmlに於いて
com.jaxrs.vendor.JaxrsVendorServlet によってinitparamが違うものになるはず
----------------------------------------------------
<?xml version="1.0"?>
<web-app>
<display-name>Archetype Created Web Application</display-name> <servlet>
<servlet-name>Rest</servlet-name>
<servlet-class>
com.jaxrs.vendor.JaxrsVendorServlet <-- サーブレット定義
</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name> <param-value> <--この名前はJAX-RSによって決まっている
com.restfully.shop.services.ShoppingApplication </param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Rest</servlet-name> <-- サーブレット実装
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
----------------------------------------------------
3章に続いて、15章に飛んで読むこととする。
15章は、3章に対するハンズオンのため。
JettyはMavenがサポートするのか
pom.xml は antのbuild.xml と同じもの
pom.xml は使いにくい、pom.xmlがまともに書ける人がいない
p221 pom.xmlの例 Legacy layoutとは何か?
----------------------------------------------------
<name/>
<description/><repositories>
<repository>
<id>java.net</id>
<url>http://download.java.net/maven/1</url>
<layout>legacy</layout> <-- legacyレイアウトとは何か
</repository>
<repository>
<id>maven repo</id>
<name>maven repo</name>
<url>http://repo1.maven.org/maven2/</url>
</repository>
<!-- For resteasy -->
<repository>
<id>jboss</id>
<name>jboss repo</name>
<url>http://repository.jboss.org/maven2</url>
</repository>
</repositories>
----------------------------------------------------
4章 HTTPメソッドとURIマッチング
4.1 HTTPメソッドのバインド
JAX-RSの標準メタアノテーション
@javax.ws.rs.GET
@javax.ws.rs.PUT
@javax.ws.rs.POST
@javax.ws.rs.DELETE
@javax.ws.rs.HEAD
メタアノテーションの価値は、PUT POST GET DELTEの標準HTTPメソッドを拡張して独自なアノテーションを作るため。
例えば MOVE、COPY、MKCOL、LOCK、UNLOCK などかありえる。
しかしこのように自由に拡張してしまって、これでRESTfulといえるのか。
4.2.3マトリックスパラメータ
下記表記で /e55の 最初の/はあってもなくても相対パス扱いらしい。
----------------------------------------------------
@Path("/mercedes")
public class MercedesService {@GET
@Path("/e55/{year}")
@Produces("image/jpeg")
public Jpeg getE55Picture(@PathParam("year") String year) {
...
}
----------------------------------------------------
ディレクトリ名が日本語の場合、文字コードは規定されているのか? 不明。
17章
4章のサンプルコード
@PATCH アノテーション の価値がわからない、これは状態を持つのではないのか。
5章 JAX-RSインジェクション
5.1 基本 JAX-RSアノテーションでインジェクトできる対象は複数存在する。
JAX-RS仕様が規定するインジェク ションアノテーションを以下に示す。
@javax.ws.rs.PathParam
@javax.ws.rs.MatrixParam
@javax.ws.rs.QueryParam
@javax.ws.rs.FormParam
@javax.ws.rs.HeaderParam
@javax.ws.rs.CookieParam
@javax.ws.rs.core.Context
5.2 @PathParam
5.3 @MatrixParam
----------------------------------------------------
@Path("/{make}") <-- ここが cars/{make} になっていないのは誤植か?
public class CarResource {@GET
@Path("/{model}/{year}")
@Produces("image/jpeg")
public Jpeg getPicture(@PathParam("make") String make,
@PathParam("model") String model, @MatrixParam("color") String color) { ...
}
----------------------------------------------------
戻り値はひとつ
コレクション
下記コードの List<String>の部分が気になる、
Integerを定義した場合、動作するのか。
----------------------------------------------------
import java.util.List;
@Path("/customers")
public class CustomerResource {@GET
@Produces("application/xml")
public String getCustomers(
@QueryParam("start") int start, @QueryParam("size") int size,
@QueryParam("orderBy") List<String> orderBy) { ...
}
}
----------------------------------------------------
引数でGenericは取れるか getTypeParametersがあるが取れるのはgeneric methodの型パラメータしか分らないのではないのか。
getGenericParameterTypes で Type取得できないか。
JAX-RS か ServletFilterで 400 Bad Requestをひっかけたら便利ではないか。
5章が終わって、そのサンプルの 18章を読み、次回は6章から。
[ 戻る ]