job*_*ang 4 java rest jax-rs http-status-code-404
我正在使用 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;
}
Run Code Online (Sandbox Code Playgroud)
资源类如:
@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;
}
Run Code Online (Sandbox Code Playgroud)
当我使用 测试服务时http://localhost:8082/dt/test/user,出现 404 错误。
Pau*_*tha 14
您所拥有的只是 JAX-RS API jar。这只是一个“规格”罐子。它只有规范中定义的接口和类。但是这背后没有引擎。该规范仅包含我们可以对其进行编程的API,但这取决于提供引擎的规范的实现;几个实现是 Jersey 和 RESTEasy。
话虽如此,JAX-RS 是 Java EE 规范的一部分,因此任何完全符合 Java EE 的服务器都会将此实现作为其内部库的一部分。但是 Tomcat不是完全兼容的 Java EE 服务器。它只是一个 servlet 容器,只实现了 EE 规范的一小部分,如 servlet 和 JSP。所以如果你想在 Tomcat 中使用 JAX-RS,你应该添加一个implementation。
您可以使用的一种实现是Jersey。如果单击该链接,则可以下载“Jersey xx 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>
Run Code Online (Sandbox Code Playgroud)
注意:截至今天(2021 年 5 月 22 日)的最新版本为 3.0.2。随着版本3.x中,对JAX-RS(和其他EE的API)的命名空间已经从
javax对jakarta。所以 Tomcat 9 将不支持这一点。您将不得不使用 Tomcat 10,或者您将不得不使用 Jersey 2.x 版。
| 归档时间: |
|
| 查看次数: |
4685 次 |
| 最近记录: |