找到 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 模块。