RESTEASY003210:找不到完整路径的资源:Tomcat

新手上路,请多包涵

我收到以下错误:

这是堆栈跟踪:

 javax.ws.rs.NotFoundException: RESTEASY003210: Could not find resource for full path: http://localhost:9050/scenarioplanner/api/models/
    at org.jboss.resteasy.core.registry.ClassNode.match(ClassNode.java:75)
    at org.jboss.resteasy.core.registry.RootClassNode.match(RootClassNode.java:48)
    at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:445)
    at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:257)
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:194)
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

这是我的 web.xml

     <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">

</webapp>

这是我的 pom.xml

 <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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>us.deloitteinnovation.dmaanalytics.nissan.backend</groupId>
    <artifactId>scenarioplanner</artifactId>
    <packaging>war</packaging>
    <version>1.0.0-SNAPSHOT</version>
    <name>Scenario Planner Maven Webapp</name>
    <url>http://maven.apache.org</url>

    <dependencies>

     <dependency>
         <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-servlet-initializer</artifactId>
            <version>3.0.12.Final</version>
        </dependency>

<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jaxb-provider -->
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxb-provider</artifactId>
    <version>3.0.12.Final</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-jaxrs -->
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>3.0.12.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-validator-provider-11 -->
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-validator-provider-11</artifactId>
    <version>3.0.12.Final</version>
</dependency>

<dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson-provider</artifactId>
        <version>3.0.12.Final</version>
    </dependency>

<dependency>
        <groupId>net.sf.scannotation</groupId>
        <artifactId>scannotation</artifactId>
        <version>1.0.2</version>
    </dependency>

<!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1-m01</version>
</dependency>

    <!-- https://mvnrepository.com/artifact/org.jasypt/jasypt -->
<dependency>
    <groupId>org.jasypt</groupId>
    <artifactId>jasypt</artifactId>
    <version>1.9.2</version>
</dependency>

    </dependencies>

    <build>
        <finalName>scenarioplanner</finalName>
        <plugins>
            <plugin>
             <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

        </plugins>

    </build>

</project>

我在这里声明了一个空的 Application 类:

 public class ScenarioPlannerApp  extends Application{}

我正在使用以下带有 URL http://localhost:9050/scenarioplanner/api/models/ 的简单 Web 服务:

资源代码是:

 @Path("")
public class ModelController
{

    @GET
    @Path("/models/")
    @Produces(MediaType.APPLICATION_JSON)

    public Response getModels() throws Exception {

        ModelService modelService = null;
        List<CarModelData> models;

            models = modelService.getModelDetails();

        logger.debug("Webservice Name [/models/] execution completed with HTTP status OK [200]");
        //return Responsestatus(Status.OK).entity(models).build();
        return Response
        .status(Status.OK)

        .entity(models)
        .build();

    }

我已经阅读了很多关于堆栈溢出的答案,但无法解决这个错误。我花了一整天的时间试图调试这个错误,但徒劳无功!

任何帮助都将受到高度重视和赞赏!!

原文由 Sabyasachi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

修复应用程序路径

@ApplicationPath 注释扩展 Application 的类:

 @ApplicationPath("/api")
public class ScenarioPlannerApp extends Application {
    ...
}

修复资源路径

使用 --- 注释 ModelController@Path /models 作为值。 getModels() 方法在这种情况下不需要 @Path 注释:

 @Path("/models")
public class ModelController {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getModels() throws Exception {
        ...
    }
}

重要的是要记住 资源类 上的 @Path 注释指定 _资源_。

创建资源方法

您很可能需要向 ModelController 资源类添加更多方法。请参阅以下示例:

要有一个方法来处理 POST/api/models 的请求,你可以有以下内容:

 @POST
@Consumes(MediaType.APPLICATION_JSON)
public Response createModel(Model model) throws Exception {
    ...
}

要有一个方法来处理 GET/api/models/{id} 的请求,你可以有以下内容:

 @GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response getModel(@PathParam("id") Long id) throws Exception {
    ...
}

重要的是要记住资源类的 资源方法 上的 @Path 注释指定资源的 资源。

原文由 cassiomolin 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于那些正在将他们的 Resteasy 版本从 2.X 迁移到 3.X 或 4.X 的人。

JAX-RS 2.0 的路径匹配算法已经改变并且变得非常严格。

为了让您继续使用现有方法的 @Path ,您必须启用 resteasy.wider.request.matching Resteasy 配置。

网站.xml

 <context-param>
    <param-name>resteasy.wider.request.matching</param-name>
    <param-value>true</param-value>
</context-param>

参考: Resteasy迁移指南第55.3节

原文由 Melvin Sy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题