2017-10-12 11 views
0

デプロイメント記述子ではなくアノテーションを使用して、JavaでサンプルRESTサービスを作成しようとしています。条件付きでRESTリソースを公開する

@ApplicationPath("/services") 
public class RestApp extends Application { 
    @Override 
    public Set<Class<?>> getClasses() { 
     final Set<Class<?>> classes = new HashSet<>(); 
     classes.add(Request.class); 
     return classes; 
    } 
} 

サンプルリクエストクラス

@Path("sequence-numbers") 
public class Request { 
@POST 
    @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response createInstance(SnsConfig snsConfig, @Context final HttpServletResponse servletResponse, 
       @Context final HttpServletRequest servletRequest) { 
    } 
} 

(Request.class)classes.add場合@Path( "配列番号")が露出されるべきではないコードから除去されます。しかし、たとえ私がclasses.addステートメントをコメントアウトしても、postメソッドはリクエストを送信するとヒットします。注釈の使用が間違っているのでしょうか、それともおそらくこれを引き起こす可能性のあるものがありますか?

編集:私はgetClassesメソッド全体をコメントアウトしようとしましたが、これはまだ動作します。私は、@ApplicationPathの下でクラスが指定されていない場合は、すべてのファイルが@Pathの存在をスキャンするかどうかを推測します。 getClassesを使用したかった理由は、アプリケーションの特定の条件をチェックし、クラス/ @ Pathを追加するかどうかを決定することでした。条件に基づいてRESTリソースを公開する方法はありますか?

答えて

1

はい、可能です。 getClasses()メソッドで空のセットを返した場合、またはjavax.ws.rs.core.ApplicationからgetClasses()(またはgetSingletons())を上書きしないと、すべてのパスがスキャンされます。空でないセットを返すと、指定されたクラスだけが公開されます。

+0

はい空のセットを返していましたが、それが問題でした。空のセットを返すのではなく、@ApplicationPathに対応するクラスを公開しました。 – kishore

関連する問題