找到 JAX-RS 资源的路径
find path to JAX-RS resource
我只是找不到访问部署到 wildfly 的 JAX-RS 资源的路径。
ear.ear pom:
<parent>
<artifactId>jee-services</artifactId>
<groupId>org.mycompany</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<packaging>ear</packaging>
<modelVersion>4.0.0</modelVersion>
<artifactId>ear</artifactId>
<dependencies>
<dependency>
<groupId>org.mycompany</groupId>
<artifactId>ejb_book</artifactId>
<version>1.0-SNAPSHOT</version>
<type>ejb</type>
</dependency>
</dependencies>
ejb_book pom:
<parent>
<artifactId>jee-services</artifactId>
<groupId>org.mycompany</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>ejb</packaging>
<artifactId>ejb_book</artifactId>
应用程序配置
@ApplicationPath("/resources")
public class ApplicationConfig extends Application {
}
资源
@Stateless
@Path("/books")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class BookResource extends AbstractFacade<Book> {
@PersistenceContext
private EntityManager entityManager;
@GET
@Path("/getBooks")
public Book getBook() {
return new Book();
}
我认为问题在于我将我的 ejb_book.jar 打包到 ear.ear 中(我在其中收集所有其他 ejb 模块)
我试过了:
localhost:8080/ear/resources/books/getBooks
和许多其他组合,但其中 none 有效。
应用程序可以很好地部署到 WildFly 服务器。
顺便说一句:有没有工具可以帮助人们访问他们的 JAX-RS 资源?以 IDE 为例。这样我的问题就不是问题了。
根据 JAX-RS 2.0 规范,部分 2.3.2 Servlet
A JAX-RS application is packaged as a Web application in a .war file.
由于您没有将您的应用程序打包为 WAR 模块并且您的 EAR 中也没有 WAR 模块,因此您没有为您的(网络)提供上下文根申请。
这会阻止您通过所需方式访问您的 REST API:
http://localhost:8080/<context-root>/resources/books/getBooks
作为解决方案,您可以将整个应用程序打包为 WAR,将应用程序 类 放在 WEB-INF/classes 或 WEB-INF/lib 中,并将所需的库放在 WEB-INF/lib,或者您可以继续使用您的 EAR,向其添加一个 WAR 模块。
我只是找不到访问部署到 wildfly 的 JAX-RS 资源的路径。
ear.ear pom:
<parent>
<artifactId>jee-services</artifactId>
<groupId>org.mycompany</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<packaging>ear</packaging>
<modelVersion>4.0.0</modelVersion>
<artifactId>ear</artifactId>
<dependencies>
<dependency>
<groupId>org.mycompany</groupId>
<artifactId>ejb_book</artifactId>
<version>1.0-SNAPSHOT</version>
<type>ejb</type>
</dependency>
</dependencies>
ejb_book pom:
<parent>
<artifactId>jee-services</artifactId>
<groupId>org.mycompany</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>ejb</packaging>
<artifactId>ejb_book</artifactId>
应用程序配置
@ApplicationPath("/resources")
public class ApplicationConfig extends Application {
}
资源
@Stateless
@Path("/books")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class BookResource extends AbstractFacade<Book> {
@PersistenceContext
private EntityManager entityManager;
@GET
@Path("/getBooks")
public Book getBook() {
return new Book();
}
我认为问题在于我将我的 ejb_book.jar 打包到 ear.ear 中(我在其中收集所有其他 ejb 模块)
我试过了:
localhost:8080/ear/resources/books/getBooks
和许多其他组合,但其中 none 有效。
应用程序可以很好地部署到 WildFly 服务器。
顺便说一句:有没有工具可以帮助人们访问他们的 JAX-RS 资源?以 IDE 为例。这样我的问题就不是问题了。
根据 JAX-RS 2.0 规范,部分 2.3.2 Servlet
A JAX-RS application is packaged as a Web application in a .war file.
由于您没有将您的应用程序打包为 WAR 模块并且您的 EAR 中也没有 WAR 模块,因此您没有为您的(网络)提供上下文根申请。
这会阻止您通过所需方式访问您的 REST API:
http://localhost:8080/<context-root>/resources/books/getBooks
作为解决方案,您可以将整个应用程序打包为 WAR,将应用程序 类 放在 WEB-INF/classes 或 WEB-INF/lib 中,并将所需的库放在 WEB-INF/lib,或者您可以继续使用您的 EAR,向其添加一个 WAR 模块。