我是使用JAX-RS标准的REST应用程序的新手,我想学习如何使用此标准。
因此,我下载并设置了Apache Tomcat 9.0,并添加了<Context>
像这样:
<Context docBase="...\RestEasyApp\target\RestEasyApp" path="/example" reloadable="true"/>
然后将{strong> RestEasy 通过以下依赖项添加到pom.xml
中:
<!-- 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
运行此应用程序时,它会给我以下信息:
我不知道为什么它不起作用。
答案 0 :(得分:2)
您必须在项目中添加一个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
类的映射从@Path("/api")
更改为@Path("/rest/api")
,并使类public
允许RESTEasy反映在{{1} }方法:
hello()
通常,更好的解决方案是:
@Path("/rest/api")
public class Hello {
删除<servlet-mapping>
web.xml
类中的@ApplicationPath("")
更改为@ApplicationPath("/rest")
HelloApplication
类中使用@Path("/api")
代替@Path("/rest/api")