在 Jersey GET 响应中使用外部对象
Use external object in Jersey GET response
我正在使用 Jersey 和 Jetty 开发休息 API 服务。
这很简单,我有很多这样的端点:
@GET
@Path("/username/{username : [a-zA-Z][a-zA-Z_0-9]}")
@Produces(MediaType.TEXT_PLAIN)
public String getUsername(@Context UriInfo uriInfo, String content) {
MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
String nameParam = queryParams.getFirst("name");
//Dataset<Row> df = GetDataFrame.getDF();
return "test";
}
在 getUserName 方法中,我需要使用我在主 class 中创建的对象。
主要class目前是这样的:
SourceHandler source = new SparkHandler(inputSource);
source.loadIntoMemory();
Server server = new Server(8080);
ServletContextHandler ctx =
new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
ctx.setContextPath("/");
server.setHandler(ctx);
ServletHolder serHol = ctx.addServlet(ServletContainer.class, "/rest/*");
serHol.setInitOrder(1);
serHol.setInitParameter("jersey.config.server.provider.packages",
"com.ed7.res");
我想在 GET 响应中使用源对象。
在泽西岛有这样做的最佳做法吗?
否则,我会创建另一个 class 和一个静态 field/static 方法 returns 该特定对象。
您可以使用 HK2 DI. What you can do to configure it is create a standalone ServiceLocator
and set that locator to be the parent locator of the app, using a Jersey property.
public static void main(String... args) {
SourceHandler source = new SparkHandler(inputSource);
ServiceLocator locator = ServiceLocatorUtilities.bind(new AbstractBinder() {
@Override
protected void configure() {
bind(source).to(SourceHandler.class);
}
});
ServletHolder serHol = ctx.addServlet(ServletContainer.class, "/rest/*");
serHol.setInitParameter(ServletProperties.SERVICE_LOCATOR, locator);
}
然后你可以 @Inject
SourceHandler
任何你需要的地方
@Path("whatever")
public class Resource {
@Inject
private SourceHandler sourceHandler;
}
我正在使用 Jersey 和 Jetty 开发休息 API 服务。 这很简单,我有很多这样的端点:
@GET
@Path("/username/{username : [a-zA-Z][a-zA-Z_0-9]}")
@Produces(MediaType.TEXT_PLAIN)
public String getUsername(@Context UriInfo uriInfo, String content) {
MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
String nameParam = queryParams.getFirst("name");
//Dataset<Row> df = GetDataFrame.getDF();
return "test";
}
在 getUserName 方法中,我需要使用我在主 class 中创建的对象。 主要class目前是这样的:
SourceHandler source = new SparkHandler(inputSource);
source.loadIntoMemory();
Server server = new Server(8080);
ServletContextHandler ctx =
new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
ctx.setContextPath("/");
server.setHandler(ctx);
ServletHolder serHol = ctx.addServlet(ServletContainer.class, "/rest/*");
serHol.setInitOrder(1);
serHol.setInitParameter("jersey.config.server.provider.packages",
"com.ed7.res");
我想在 GET 响应中使用源对象。 在泽西岛有这样做的最佳做法吗? 否则,我会创建另一个 class 和一个静态 field/static 方法 returns 该特定对象。
您可以使用 HK2 DI. What you can do to configure it is create a standalone ServiceLocator
and set that locator to be the parent locator of the app, using a Jersey property.
public static void main(String... args) {
SourceHandler source = new SparkHandler(inputSource);
ServiceLocator locator = ServiceLocatorUtilities.bind(new AbstractBinder() {
@Override
protected void configure() {
bind(source).to(SourceHandler.class);
}
});
ServletHolder serHol = ctx.addServlet(ServletContainer.class, "/rest/*");
serHol.setInitParameter(ServletProperties.SERVICE_LOCATOR, locator);
}
然后你可以 @Inject
SourceHandler
任何你需要的地方
@Path("whatever")
public class Resource {
@Inject
private SourceHandler sourceHandler;
}