新たに追加されたFilter
【概要】
JAX-RS2.0から追加されたFilterを使います。
追加されたFilterは↓の4つです。
- ClientRequestFilter
- ClientResponseFilter
- ContainerRequestFilter
- ContainerResponseFilter
ClientRequestFilter、ClientResponseFilterは
ClientAPIが利用された時に呼び出されます。
ContainerRequestFilter、ContainerResponseFilterは
サーバサイドの処理が実行された時に呼び出されます。
今回はContainerRequestFilter、ContainerResponseFilterを
試しています。
【Filterクラスの実装】
import java.io.IOException; import javax.ws.rs.client.ClientRequestContext; import javax.ws.rs.client.ClientRequestFilter; import javax.ws.rs.client.ClientResponseContext; import javax.ws.rs.client.ClientResponseFilter; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.ContainerResponseContext; import javax.ws.rs.container.ContainerResponseFilter; import javax.ws.rs.ext.Provider; @Provider public class SampleFilter implements ClientRequestFilter, ClientResponseFilter, ContainerRequestFilter, ContainerResponseFilter{ @Override public void filter(ClientRequestContext requestContext) throws IOException { System.out.print("This method is ClientRequestFilter."); } @Override public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException { System.out.print("This method is ClientResponseFilter."); } @Override public void filter(ContainerRequestContext requestContext) throws IOException { System.out.print("This method is ContainerRequestFilter."); } @Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { System.out.print("This method is ContainerResponseFilter."); } }
おまけでClientFilterも実装して見ました。
Filterはそれぞれjavax.wr.rs.containerパッケージ、javax.wr.rs.clientパッケージ配下にあります。
各インターフェイスにはfilterメソッドが定義されています。
今回はコンソールに出力する処理を実装しています。
javax.ws.rs.ext.Providerアノテーションを付与することにより、
全てのリソースクラスに対してFilterが実行されるようになります。
【その他のクラス】
Applicationクラスとリソースクラスは↓のようにしています。
import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("/service") public class BlogSampleApplication extends Application{ }
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Response; @Path("/filter") public class FilterSampleResource { @GET public Response getResponse() { final String returhHtml = "<html><head><title>Filter Sample</title></head><body>Filter Sample</body></html>"; return Response.ok(returhHtml).build(); } }
【実行してみる】
ブラウザからURLを入力して実行すると
コンソール上に↓の用にメッセージが表示されます。
This method is ContainerRequestFilter. This method is ContainerResponseFilter.
ContainerRequestFilterとContainerResponseFilterの処理が
実行されていることがわかります。
今回はクライアントAPIは使用していないので、
ClientRequestFilterとClientResponseFilterは実行されません。