【问题标题】:Simple web rest api in Java with eclipse and tomcat带有eclipse和tomcat的Java中简单的web rest api
【发布时间】:2021-12-17 23:47:42
【问题描述】:

我按照教程进行了操作,但该项目不起作用。 当我在 tomcat 中部署战争并访问地址 http://localhost:8080/queroquero/rest/vendedor/get 我有 404 状态,但是如果我访问 http://localhost:8080/queroquero/ 我得到一个“你好世界”。

@ApplicationPath("rest")
public class Main extends Application{ }
---------------------------------------------
@Path("vendedor")
public class VendedorResource {

    @GET
    @Path("get")
    @Produces(MediaType.APPLICATION_JSON)
    public Response get() {
        String texto = new String("It's working!!!");
        return Response.ok(texto).build();
    }
    
}

我的 POM.xml 依赖项:

<dependencies>
    <dependency>
        <groupId>jakarta.platform</groupId>
        <artifactId>jakarta.jakartaee-api</artifactId>
        <version>8.0.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>2.3.3</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.7</version>
    </dependency>
  </dependencies>

我的 web.xml:

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!-- Auto scan REST service -->
</web-app>

我已经花了好几个小时了,却找不到错误或遗漏的地方。

【问题讨论】:

  • 如果您使用的是 Tomcat 9 而不是 Tomcat 10,您需要将上述答案中的每个工件降级为一个主要版本(例如,使用 2.35 用于 Jersey)。 Tomcat 支持的 API 列表可以在 this answer 中找到。
  • 你使用的是什么 Tomcat 版本?
  • @MarkRotteveel 我正在使用 Tomcat 10
  • @MoabRodrigues 如果您使用的是 Tomcat 10,那么您需要加载 Jakarta EE 9.x 库(jakarta.* 包),目前您正在加载 Jakarta EE 8.x 或更低版本的库(@987654327 @包)。或者,您需要降级到 Tomcat 9。

标签: java rest tomcat


【解决方案1】:

您可能需要改进您的@Path 定义?: 据我所知,你应该说:

@Path("/rest")
@Path("/venderdor")
@Path("/get")

【讨论】:

  • 我已经这样做了,但并没有解决问题。所以我重置了更改
【解决方案2】:

各位, 问题是由 Maven 导入产生的冲突。至于寻找兼容性的库的变化,我得到了结果。主要的变化是改变 JAX 的 Jakarta 实现为 Jersey 实现。 如果有人想知道我是如何做到的,只需检查 github (Rest code) 中的完整代码即可。 不幸的是,我没有时间去发现 jakarta 实现的正确版本是什么,它们中的哪一个要匹配。 这里分享一下pom.xml的依赖:

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.glassfish.jersey</groupId>
                <artifactId>jersey-bom</artifactId>
                <version>${jersey.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
            <!-- artifactId>jersey-container-servlet</artifactId -->
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
        </dependency>
        
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.7</version>
        </dependency>
        
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
    </dependencies>

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 2014-07-25
    • 2014-12-21
    • 2013-07-16
    • 1970-01-01
    • 2017-06-04
    • 2023-03-08
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多