javax.ws.rs.NotFoundException:RESTEASY003210:无法找到完整路径的资源:使用RestEASY,Intellij IDEA 16.1,Tomcat 8.0.33

时间:2016-05-15 13:02:49

标签: java rest tomcat intellij-idea resteasy

有人问了很多问题,但是我尝试了所有建议的变种,谷歌搜索了我的问题,检查了RestEASY规范。什么都没有帮助我。 我正在创建一个非常简单的“Hello World”应用程序。当我编写路由到我的REST服务的URL时,我在浏览器中收到以下错误和空白的空页。

这是堆栈跟踪:

<?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>com.taras.resty</groupId>
    <artifactId>Resty</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>LATEST</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>LATEST</version>
     </dependency>
    </dependencies>

</project>

这是我的pom.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>V1_Status</servlet-name>
        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.taras.resty.status.V1_Status</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>V1_Status</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>

</web-app>

这是我的web.xml:

package com.taras.resty.status;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Application;
import javax.ws.rs.ApplicationPath;

@ApplicationPath("/v1/status")
public class V1_Status extends Application  {
    private static final String api_version= "00.01.00";

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String returnTitle(){
        return "<p>Java Web Service</p>";
    }

    @Path("/version")
    @GET
    @Produces(MediaType.TEXT_HTML)
    public String returnVersion(){
        return "<p>Version + </p>" + api_version;
    }

}

这是我的类来处理我的REST请求:

{{1}}

我使用的网址是:http://localhost:8080/api/v1/status

提前谢谢你。

编辑 - 已解决对于将面临同样问题的人。 @tair帮我解决了我的错误。试试他的版本(你可以在https://github.com/tsabirgaliev/hello-jaxrs找到它)。 我们还没有找到原因,它已经以某种方式消失了(魔术)。 当然,有关更详细的信息,请查看规范 http://docs.jboss.org/resteasy/docs/3.0.16.Final/userguide/html_single/index.html#d4e113

1 个答案:

答案 0 :(得分:2)

由于您的web.xml建议使用与Servlets 3.1兼容的Tomcat,因此Resteasy的配置应该不同。请参阅官方Resteasy文档[1]的3.5. Standalone Resteasy in Servlet 3.0 Containers部分。

如果您坚持使用旧样式配置,则应将{JAX-RS应用程序指定为init-param的{​​{1}}:

HttpServletDispatcher

在任何一种情况下,您都必须继承<servlet> <servlet-name>Resteasy</servlet-name> <servlet-class> org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher </servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>com.taras.resty.Application</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>V1_Status</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping> <context-param> <param-name>resteasy.servlet.mapping.prefix</param-name> <param-value>/api</param-value> </context-param>

更新:这里[2]是一个完整的应用示例。使用Tomcat 8.0.33进行测试

[1] http://docs.jboss.org/resteasy/docs/3.0.16.Final/userguide/html_single/index.html#d4e113

[2] https://github.com/tsabirgaliev/hello-jaxrs