java - 使用 RestEasy 在 Tomcat 上使用 JAX-RS

标签 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

然后进入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 运行这个应用程序时,它给了我这个: enter image description here

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

最佳答案

您必须添加 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 {

一般来说,更好的解决方案是:

  1. 删除 <servlet-mapping>来自web.xml
  2. 更改@ApplicationPath("")@ApplicationPath("/rest")HelloApplication
  3. 使用@Path("/api")而不是@Path("/rest/api")Hello

关于java - 使用 RestEasy 在 Tomcat 上使用 JAX-RS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51106367/

相关文章:

java - SSE实现(Weblogic 12.2.1.2.0 + Jax-RS 2.1(用于注册资源)+ CXF 3.2.5+ + Springboot + jersey 2.25.1)

java - 我在使用 JAX-RS 实现子资源时遇到问题?

java - 在从扫描仪中提取的整数的最后一位上启动 for 循环(java)

java - Spring Cloud Feign UnsatisfiedDependencyException 异常

tomcat - 如何在 Apache tomcat 中使用 NTLM 功能?

java - 如何放置子BeanParam

Java- Math.random() : Selecting an element of a 13 by 13 triangular array

java - 应为 BEGIN_OBJECT,但在第 13 行第 1 列路径 $ 处为 STRING

tomcat - Liferay session 扩展 (/c/portal/extend_session) - HTTP 403 禁止访问

java - WEB-INF 文件夹中的 web.xml 欢迎文件