私はジャージーJAX-RSを使用してRESTfulなWebサービスを実装しようとしています。私は桟橋のWebサーバーを埋め込み、その上にすべてのコントローラを登録したかったです。
この例に基づいてI:https://nikgrozev.com/2014/10/16/rest-with-embedded-jetty-and-jersey-in-a-single-jar-step-by-step/
ここでエントリーポイントはコントローラです。
@Path("/entry-point")
public class EntryPoint {
@GET
@Path("test")
@Produces(MediaType.TEXT_PLAIN)
public String test() {
return "Test";
}
}
これは、キー名「を使用して登録されているjersey.config.server.provider.classnamesを次のように」:
public class App {
public static void main(String[] args) throws Exception {
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
Server jettyServer = new Server(8080);
jettyServer.setHandler(context);
ServletHolder jerseyServlet = context.addServlet(
org.glassfish.jersey.servlet.ServletContainer.class, "/*");
jerseyServlet.setInitOrder(0);
// Tells the Jersey Servlet which REST service/class to load.
jerseyServlet.setInitParameter(
"jersey.config.server.provider.classnames",
EntryPoint.class.getCanonicalName());
try {
jettyServer.start();
jettyServer.join();
} finally {
jettyServer.destroy();
}
}
}
どのように私は多くのコントローラを登録することができますか?
私はのparamsとして、他のコントローラクラスを追加した場合、私は唯一の「ので、私は、それぞれに与えなければならないものをキーの名前を知らないjersey.config.server.provider.classnamesは」仕事に思えるし、一度動作します。ありがとうございました。
あなたは一度だけプロパティを使用することができますので、あなたが値としてカンマ区切りのリストを使用する必要がありますclassOne, classTwo, classThree
。
別のオプションは、プロパティを使用することでjersey.config.server.provider.packages
、ちょうどそれを再帰的にスキャンするパッケージを与えます
jerseyServlet.setInitParam(ServerProperties.PROVIDER_PACKAGES, "my.package.to.scan");
参照してくださいServerProperties設定できる複数のプロパティのために。ここではPROVIDER_PACAKGES
、その文字列値である定数は、ありますjersey.config.server.provider.packages
。同じclassnames
プロパティの定数がありますPROVIDER_CLASSNAMES
。
スキャンにパッケージを宣言することにより、ジャージーは、そのパッケージをスキャンします再帰的に(デフォルトでは)およびすべての登録@Path
と@Provider
、それはスキャンで見つかった注釈付きクラスを。