gpt4 book ai didi

java - Jersey +Grizzly - @ApplicationPath 被忽略

转载 作者:行者123 更新时间:2023-11-30 06:32:38 36 4
gpt4 key购买 nike

我在 Grizzly 之上运行 Jersey 2.26-b09,并使用以下代码启动 Grizzly HTTP 服务器:

public void start() {
URI uri = UriBuilder.fromPath("").scheme("http").host("localhost").port(8084).path("/rest").build();
Map<String, String> params = new HashMap<>(16);
String applicationClassName = RestApplication.class.getName();
String applicationPackageName = RestApplication.class.getPackage().getName();
String productionPackageName = ProductionService.class.getPackage().getName();
params.put(ServletProperties.JAXRS_APPLICATION_CLASS, applicationClassName);
params.put(ServerProperties.PROVIDER_PACKAGES, productionPackageName + "," + applicationPackageName);
HttpServer server = GrizzlyWebContainerFactory.create(uri, params);
server.start();
}

RestApplication 类扩展了 Application,并具有 @ApplicationPath("/system") 注释。ProductionService 类是带有 @Path("/product") 注释的 REST 资源。

我可以看到 @ApplicationPath 中指定的路径被忽略:我的资源可以在/rest/product 访问,而不是在/rest/system/product 访问。

我尝试将 URI 更改为/rest/system 而不是/rest,但没有成功:

    URI uri = UriBuilder.fromPath("").scheme("http").host("localhost").port(8084).path("/rest/system").build();

应用程序部署在根上下文/rest 中,而不是/rest/system 中。

我错过了什么?

当然,作为解决方法,我可以将资源路径从“/生产”更改为“/系统/生产”,但我想知道为什么应用程序路径被忽略。

最佳答案

我已将创建和初始化服务器的代码更改为:

public void start() {
URI uri = UriBuilder.fromPath("").scheme("http").host("localhost").port(8084).build();
Map<String, String> params = new HashMap<>(16);
String applicationPackageName = RestApplication.class.getPackage().getName();
String productionPackageName = ProductionService.class.getPackage().getName();
params.put(ServerProperties.PROVIDER_PACKAGES, productionPackageName + "," + applicationPackageName);

HttpServer server = GrizzlyHttpServerFactory.createHttpServer(uri);
WebappContext context = new WebappContext("system", "/rest/system");
ServletRegistration registration = context.addServlet("jersey", ServletContainer.class);
registration.setInitParameters(params);
registration.addMapping("/*");
context.deploy(server);

server.start();
}

Web 应用程序上下文已创建,并在所需路径上提供资源。由于在此编程方法中未调用 servlet 容器初始值设定项,因此未设置 ServletProperties.JAXRS_APPLICATION_CLASS 属性。

我认为设置此属性可以完成工作,但事实并非如此。感谢@peeskillet 的提示。

关于java - Jersey +Grizzly - @ApplicationPath 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45771768/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com