使用RestEasy

时间:2018-06-29 16:54:57

标签: java tomcat jax-rs resteasy tomcat9

我是使用JAX-RS标准的REST应用程序的新手,我想学习如何使用此标准。 因此,我下载并设置了Apache Tomcat 9.0,并添加了<Context> 像这样:

<Context docBase="...\RestEasyApp\target\RestEasyApp" path="/example" reloadable="true"/>

然后使用Maven创建了具有以下结构的项目: enter image description here

然后将{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运行此应用程序时,它会给我以下信息: enter image description here

我不知道为什么它不起作用。

1 个答案:

答案 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()

通常,更好的解决方案是:

  1. @Path("/rest/api") public class Hello { 删除<servlet-mapping>
  2. web.xml类中的@ApplicationPath("")更改为@ApplicationPath("/rest")
  3. HelloApplication类中使用@Path("/api")代替@Path("/rest/api")