Tomcat 上的 JAX-RS 使用 RestEasy
JAX-RS on Tomcat by using RestEasy
我是使用 JAX-RS 标准的 REST 应用程序的新手,我想了解如何使用该标准。
所以我下载并安装了 Apache Tomcat 9.0 并添加了 <Context>
像这样:
<Context docBase="...\RestEasyApp\target\RestEasyApp" path="/example" reloadable="true"/>
然后 Maven
我创建了具有以下结构的项目:
然后进入 pom.xml
我通过这个依赖项添加了 RestEasy:
<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jaxrs -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.5.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-servlet-initializer -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-servlet-initializer</artifactId>
<version>3.5.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jackson2-provider -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
<version>3.5.1.Final</version>
</dependency>
然后进入 web.xml
我创建了 Servlet,它看起来像这样:
<web-app>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
最后我创建了 Hello.java class 来处理请求,它看起来像这样:
package com.pisi.resteasyapp;
import javax.ws.rs.*;
@Path("/api")
class Hello {
@GET
@Path("/hello")
public String hello() {
return "HELLO";
}
}
但是当我 运行 这个带有这个 uri http://localhost:8080/example/rest/api/hello
的应用程序时,它给了我这个:
我不知道为什么它不起作用。
您必须将 Application
class 添加到您的项目中:
package com.pisi.resteasyapp;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("")
public class HelloApplication extends Application {
@Override
public Set<Object> getSingletons() {
Set<Object> set = new HashSet<>();
set.add(new Hello());
return set;
}
}
您还必须将 Hello
class 的映射从 @Path("/api")
更改为 @Path("/rest/api")
并将 class public
更改为允许 RESTEasy 反映 hello()
方法:
@Path("/rest/api")
public class Hello {
一般来说,更好的解决方案是:
- 从
web.xml
中删除 <servlet-mapping>
- 在
HelloApplication
class 中将 @ApplicationPath("")
更改为 @ApplicationPath("/rest")
- 在
Hello
class 中使用 @Path("/api")
而不是 @Path("/rest/api")
我是使用 JAX-RS 标准的 REST 应用程序的新手,我想了解如何使用该标准。
所以我下载并安装了 Apache Tomcat 9.0 并添加了 <Context>
像这样:
<Context docBase="...\RestEasyApp\target\RestEasyApp" path="/example" reloadable="true"/>
然后 Maven
我创建了具有以下结构的项目:
然后进入 pom.xml
我通过这个依赖项添加了 RestEasy:
<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jaxrs -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.5.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-servlet-initializer -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-servlet-initializer</artifactId>
<version>3.5.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jackson2-provider -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
<version>3.5.1.Final</version>
</dependency>
然后进入 web.xml
我创建了 Servlet,它看起来像这样:
<web-app>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>Resteasy</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
最后我创建了 Hello.java class 来处理请求,它看起来像这样:
package com.pisi.resteasyapp;
import javax.ws.rs.*;
@Path("/api")
class Hello {
@GET
@Path("/hello")
public String hello() {
return "HELLO";
}
}
但是当我 运行 这个带有这个 uri http://localhost:8080/example/rest/api/hello
的应用程序时,它给了我这个:
我不知道为什么它不起作用。
您必须将 Application
class 添加到您的项目中:
package com.pisi.resteasyapp;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("")
public class HelloApplication extends Application {
@Override
public Set<Object> getSingletons() {
Set<Object> set = new HashSet<>();
set.add(new Hello());
return set;
}
}
您还必须将 Hello
class 的映射从 @Path("/api")
更改为 @Path("/rest/api")
并将 class public
更改为允许 RESTEasy 反映 hello()
方法:
@Path("/rest/api")
public class Hello {
一般来说,更好的解决方案是:
- 从
web.xml
中删除<servlet-mapping>
- 在
HelloApplication
class 中将 - 在
Hello
class 中使用
@ApplicationPath("")
更改为 @ApplicationPath("/rest")
@Path("/api")
而不是 @Path("/rest/api")