JAX-RS на Tomcat с использованием RestEasy - PullRequest
0 голосов
/ 29 июня 2018

Я новичок в приложении REST, используя стандарт JAX-RS, и я хочу научиться работать с этим стандартом. Поэтому я скачал и настроил Apache Tomcat 9.0 и добавил <Context> как это:

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

Затем с помощью Maven я создал свой проект со следующей структурой: enter image description here

Затем в 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 я создал сервлет, и это выглядит так:

<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 голосов
/ 29 июня 2018

Вы должны добавить 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 мог отражать метод hello():

@Path("/rest/api")
public class Hello {

В целом, лучшим решением будет:

  1. удалить <servlet-mapping> из web.xml
  2. изменить @ApplicationPath("") на @ApplicationPath("/rest") в HelloApplication классе
  3. используйте @Path("/api") вместо @Path("/rest/api") в Hello классе
...