我是使用 JAX-RS 标准的 REST 应用程序的新手,我想了解如何使用该标准。
所以我下载并安装了 Apache Tomcat 9.0,并添加了 <Context>
像这样:
<Context docBase="...\RestEasyApp\target\RestEasyApp" path="/example" reloadable="true"/>
然后进入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 类来处理请求,它看起来像这样:
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
类到您的项目:
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")
并上课public
让RESTEasy反射(reflection)hello()
方法:
@Path("/rest/api")
public class Hello {
一般来说,更好的解决方案是:
- 删除
<servlet-mapping>
来自web.xml
- 更改
@ApplicationPath("")
至@ApplicationPath("/rest")
在HelloApplication
类 - 使用
@Path("/api")
而不是@Path("/rest/api")
在Hello
类
关于java - 使用 RestEasy 在 Tomcat 上使用 JAX-RS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51106367/