【问题标题】:RESTful Java with JAX-RS 2 and Tomcat 9带有 JAX-RS 2 和 Tomcat 9 的 RESTful Java
【发布时间】:2017-09-08 11:34:06
【问题描述】:

我正在使用 JAX-RS 2 测试 RESTful 服务。下面是我的项目和课程。

@ApplicationPath("/test/*")
public class MyApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> clazz = new HashSet<>();
        clazz.add(UserResource.class);
        System.out.println("getClass");
        return clazz;
    }

资源类如:

@Path("/user")
public class UserResource {

    @GET
    @Produces("application/xml")
    public Response getUser() {
        return Response.created(URI.create("/dd")).build();
    }

    @GET
    public Response getDefaultUser() {
        System.out.println("getDefaultUser");
        return Response.created(URI.create("/dd")).build();
    }
}

当我使用 http://localhost:8082/dt/test/user 测试服务时,出现 404 错误。

【问题讨论】:

  • 我没有在 web.xml 中配置 servlet

标签: java rest jax-rs http-status-code-404


【解决方案1】:

您所拥有的只是 JAX-RS API jar。这只是一个“规格”罐子。它只有规范中定义的接口和类。但这背后没有引擎。规范只包含我们可以编程的API,但它取决于提供引擎的规范的实现;几个实现是 Jersey 和 RESTEasy。

话虽如此,JAX-RS 是 Java EE 规范的一部分,因此任何完全符合 Java EE 的服务器都会将此实现作为其内部库的一部分。但是 Tomcat 不是完全兼容的 Java EE 服务器。它只是一个 servlet 容器,只实现了 EE 规范的一小部分,例如 servlet 和 JSP。所以如果你想在Tomcat中使用JAX-RS,你应该添加一个实现

您可以使用的一种实现是Jersey。如果单击该链接,您可以下载“Jersey x.x Bundle”。将这些添加到您的项目中,它应该可以工作。

如果您正在使用 Maven,那么运行 Jersey 时应该具有的最低依赖项如下

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>${jersey.version}</version>
    <!-- latest version as of today is 2.32 -->
</dependency>

更新

注意:截至今天(2021 年 5 月 22 日)的最新版本是 3.0.2。在 3.x 版中,JAX-RS(和其他 EE API)的命名空间已从 javax 更改为 jakarta。所以 Tomcat 9 将不支持这一点。您必须使用 Tomcat 10,或者您必须使用 Jersey 版本 2.x。

【讨论】:

  • 非常感谢,知道了
猜你喜欢
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 2019-02-20
  • 2015-05-24
相关资源
最近更新 更多