JAX-RSをやってみる (8) - DynamicFeature -

2014-06-15T00:00:00+00:00 Java JAX-RS

公式ドキュメント先: https://jersey.java.net/documentation/latest/user-guide.html#d0e8531

例えば特定のリソースクラスだったりメソッドだったりで動的にコンポーネントをregisterしたいなどの要件がある場合にはDynamicFeatureを使えばよろしい模様

package sample;

import javax.ws.rs.container.DynamicFeature;
import javax.ws.rs.container.ResourceInfo;
import javax.ws.rs.core.FeatureContext;
import javax.ws.rs.ext.Provider;

import sample.controller.Home;
import sample.filter.SampleFilter;
import sample.filter.SampleRequestFilter;

@Provider
public class SampleDynamicFeature implements DynamicFeature {

    @Override
    public void configure(ResourceInfo resourceInfo, FeatureContext context) {
        Class<?> clazz = resourceInfo.getResourceClass();

        // 特定のリソースクラス以外を除外する
        if (clazz != Home.class) {
            return;
        }

        // 特定のリソースクラスのメソッドにアノテーションがついてる場合にのみ適応
        if (resourceInfo.getResourceMethod().isAnnotationPresent(SampleFilter.class)) {
            // context.register(...);
        }
    }
}

っていうように以前にMessageBodyWriter等の独自実装を利用する場合には別個なプロジェクトとしてAutoDiscoverableな仕組みを使ってたけど、リソースによる制限などによるコンポーネントの作用な手段を利用したい場合にはDynamincFeatureを使えば良い模様

JAX-RSをやってみる (9) - Container Filters - JAX-RSをやってみる (7) - Reader & Writer interceptor -