【问题标题】:restful with maven has 404 not found errorrestful with maven has 404 not found 错误
【发布时间】:2017-08-28 19:42:20
【问题描述】:

我用 javax.ws 尝试了非常简单的 restful 教程,但我遇到了 maven 依赖问题。 web.xml 文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee   http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>
        com.sun.jersey.spi.container.servlet.ServletContainer
    </servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>service</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>jersey-servlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

和这样的maven依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0      http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>untitled40</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>
</project>

类是:

package service;

import javax.ws.rs.*;
@Path("hesab")
public class App {

@Path("textc")
@GET
@Produces("text/plain")
public String recit(){
    return "got it";
}
}

问题是当我将 JAR 文件添加到 WEB-INF 中的 lib 文件夹中时,它可以工作并连接到我的服务,但是当我尝试添加 maven 依赖项并删除 lib 文件夹时,它不起作用!你能告诉我问题是什么吗?

【问题讨论】:

  • 您的示例 pom.xml 将构建一个 JAR 文件 - 而不是 WAR 文件。您需要添加一个&lt;packaging&gt;war&lt;/packaging&gt; 元素。
  • 我应该在哪里添加这个包装?在 POM 中?
  • 是的,通常在 &lt;artifactId&gt;untitled40&lt;/artifactId&gt;&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; 之间
  • 我试试这个并得到这个错误:javax.servlet.ServletException: Servlet.init() for servlet jersey-servlet throw exception
  • 使用 Tomcat 对您学习 JAX-RS 很重要吗?在 WildFly、Payara、TomEE 等全栈 Java EE 服务器上学习要容易得多,因为您只需要一个 javaee-api 依赖项,它应该是 &lt;scope&gt;provided&lt;/scope&gt;。您不需要任何其他依赖项,即使您也想尝试 CDI 和 JPA。

标签: java rest maven tomcat8


【解决方案1】:

我确实有同样的问题。

更改你的 javax 依赖项

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.4.1</version>
</dependency>

并创建这个类

package ***.services;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

import ***UsuarioResource;

/**
 * The Class PortalAppConfiguration.
 */
@ApplicationPath("api")
public class ApiConfiguration extends Application {

     @Override
        public Set<Class<?>> getClasses()
        {
            final Set<Class<?>> classes = new HashSet<>();
            classes.add(UsuarioResource.class);//your resource

            return classes;
        }

}

让你的 web.xml 像这样,因为在这个新的实现中,它没有被使用

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee   http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">

</web-app>

【讨论】:

  • 我如何调用此服务?什么是网址?
  • 在这种情况下:localhost:8080/api/ [这里是您资源中的路径]
猜你喜欢
  • 2019-05-12
  • 1970-01-01
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
相关资源
最近更新 更多