jjzjj

javax.ws.rs.NotFoundException : Could not find resource for full path

coder 2024-03-11 原文

环境

Windows 7(64)
jdk1.7.0_51(64)
RESTEasy3.0.7
apache-tomcat-7.0.50
Project Name: hello

RESTEasyHelloWorldService.java:

package com.javacodegeeks.enterprise.rest.resteasy;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/RESTEasyHelloWorld")
public class RESTEasyHelloWorldService {

    @GET
    @Path("/{param}")
    @Produces(MediaType.TEXT_PLAIN)
    public String getMsg(@PathParam("param") String name) {
        String msg = "Rest say: good " + name;
        return msg;
    }
}

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">
    <display-name>hello</display-name>

    <servlet-mapping>
        <servlet-name>resteasy-servlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

    <!-- Auto scan REST service -->
    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>

    <!-- this should be the same URL pattern as the servlet-mapping property -->
    <context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/rest</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
            </listener-class>
    </listener>

    <servlet>
        <servlet-name>resteasy-servlet</servlet-name>
        <servlet-class>
            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
        </servlet-class>
    </servlet>

</web-app>

为什么调用 http://localhost:8080/hello/rest/RESTEasyHelloWorld/a 时出现异常 返回:

javax.ws.rs.NotFoundException: Could not find resource for full path: http://localhost:8080/hello/rest/RESTEasyHelloWorld/a
    at org.jboss.resteasy.core.registry.ClassNode.match(ClassNode.java:73)
    at org.jboss.resteasy.core.registry.RootClassNode.match(RootClassNode.java:48)
...

最佳答案

您可以尝试使用 http://localhost:8080/hello/RESTEasyHelloWorld/a。 (没有 /rest)。

如果你想使用/rest,你可以将你的RESTEasyHelloWorldService@Path修改为/rest/RESTEasyHelloWorld


但根据您使用的 API 版本,您可以通过更简单的工作来让您的 Restful 服务正常运行。

我假设您的类路径中有 resteasy-jaxrs 库。

由于您没有使用 JBOSS 或 EAP,因此您还需要获取 resteasy-servlet-initializer。使用像 TOMCAT 这样的 Servlet 3.0 容器 的文档 here .

您需要扩展Application,例如创建一个RESTEasyService:

@ApplicationPath("/rest")
public class RESTEasyService extends Application {
}

您无需为该类提供任何实现,因为 RESTEasy 将扫描所有提供者和资源。使用 Application 类的文档 here .

就像您在问题中所说的那样,保留您的RESTEasyHelloWorldService:

@Path("/RESTEasyHelloWorld")
public class RESTEasyHelloWorldService {

    @GET
    @Path("/{param}")
    @Produces(MediaType.TEXT_PLAIN)
    public String getMsg(@PathParam("param") String name) {
        String msg = "Rest say: good " + name;
        return msg;
    }
}

现在您的 web.xml 不需要任何东西。 Java WS-RS 和 RESTEasy 已经做好了一切。

你的 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">

    <display-name>hello</display-name>

</web-app>

RESTEasy 官方文档一开始有点令人困惑,但一旦您了解 JBOSS 和非 JBOSS 应用程序的实现是相同的(只是使用发生变化的库),您就会变得更容易。

关于javax.ws.rs.NotFoundException : Could not find resource for full path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25224581/

有关javax.ws.rs.NotFoundException : Could not find resource for full path的更多相关文章

  1. MQTTX工具上的 mqtt mqtts ws wss的区别,以及常见问题解答 - 2

    ws --> WebSocket非加密(端口8083)wss-->WebSocketSSL加密(端口8084)mqtt-->mqtt非加密(端口1883)mqtts-->mqtt加密 (端口8884)WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据初学者容易出现以下几个错误:连接地址没有指明协议:WebSocket作为一种通信协议,其使用 ws (非加密)、wss(SSL加密)作为协议标识。MQTT.js客户端支持多种协议,连接地址需指明协议类型;连接地址没有指明端口:MQTT并未对WebSocket接入端口做出规定,EMQX上默认使用 8083 

  2. javascript - WebSocket 连接到 'ws://localhost:3000/' 失败 : Connection closed before receiving a handshake response - 2

    我玩了一个friend制作的游戏,并希望通过使用WebRTC和websockets在对等点之间发送按键数据来使其可以跨浏览器玩。但是,我在控制台中收到此错误:WebSocketconnectionto'ws://localhost:3000/'failed:Connectionclosedbeforereceivingahandshakeresponse我的服务器文件有以下几行:'usestrict';constexpress=require('express');constSocketServer=require('ws').Server;constpath=require('pat

  3. javascript - 在 Socket.IO 和 WS 之间共享 WebSocket 连接 - 2

    为了能够在利用Socket.IO的RPC功能的同时发送二进制数据,我认为我可以同时使用Socket.IO和WS同一台服务器上的模块。我想知道是否可以使用同一个HTTP服务器,而不是打开完全独立的服务器来建立两个连接。是否可以同时为Socket.IO和WS仅使用一个通过http.createServer()创建的服务器?明确地说,我希望从客户端创建Socket.IO连接和常规WebSocket连接。以下代码在客户端创建协议(protocol)错误,大概是因为Socket.IO和WS都在尝试处理连接。varhttp=require('http');varserver=http.create

  4. javax 脚本如何从 Java 调用 JavaScript 中的函数 - 2

    我正在尝试通过Java调用JavaScript中的函数。这在直接将脚本作为字符串读取时效果很好,但我使用的是CompiledScripts。当我使用编译脚本执行此操作时,如果我还添加绑定(bind),它会提示找不到方法。没有绑定(bind)它可以工作,但当然函数失败,因为它需要绑定(bind)。有什么想法吗?CompiledScriptscript=...getscript....Bindingsbindings=script.getEngine().createBindings();LoggerscriptLogger=LogManager.getLogger("TEST_SCRIP

  5. javascript - "TypeError: this is not a typed array.with"Node.js 中的 WS.js - 2

    我的服务器文件中只有这个,出现错误:constWebSocket=require('ws');constwss=newWebSocket.Server({port:9000});wss.broadcast=functionbroadcast(data){wss.clients.forEach(functioneach(client){if(client.readyState===WebSocket.OPEN){client.send(data);}});};wss.on('connection',functionconnection(ws){ws.on('message',functi

  6. javascript - Node.js,获取找不到模块 'ws'错误 - 2

    我已经在我的Windows-7PC上安装了node.js。我无法创建到远程服务器的websocket连接。我试图在我的脚本中加载模块“ws”:varWebSocket=require('ws')它给出了一个错误:cannotfindmodule'ws'所以我按照这里的说明进行操作:node.jswebsocketmoduleinstalledbutwon'tworkinscriptsExecutecmdasAdministrator(Rightclickcmdicon->RunasAdministrator)Thentypeincmd:c:\NodeInstalationDir\>np

  7. 带有 RS-232 串行端口的 Javascript 接口(interface) - 2

    我目前正在从事一个涉及4端口A/V开关的项目。该开关可以通过RS-232控制。将与交换机连接的计算机运行Vista。我想创建一个侧边栏小工具,它有4个按钮-交换机上的每个端口1个。当用户按下按钮时,它会切换到该端口。我用谷歌搜索了一下,似乎在javascript和rs-232之间没有很好的接口(interface)方式。有人对我有什么建议吗?谢谢! 最佳答案 你喜欢复杂的技巧吗?安装网络服务器。使用CGI、Python、PHP、Perl或其他方法从网络服务器上的页面控制串行端口。将控件指向网页。

  8. WS-I Reliable Secure Profile 的 Javascript 实现 - 2

    我正在使用.NET4serversideimplementation的ReliableSecureProfile用于HTTP/S推送,想知道是否有可用的JavaScript客户端。 最佳答案 没有。有severalgenericSOAPlibraries与网络服务对话,但不是专门针对WS-I或RSP定义的网络服务。不过,它可能会成为一个很好的开源项目。如果您启动它,请在此处添加信息,其他人可能会喜欢它:) 关于WS-IReliableSecureProfile的Javascript实现,

  9. java - 自动生成的 javascript jax-rs 客户端 - 2

    我想要基于JAX-RS注释为我生成一些Javascript服务stub。我在RESTEasy中找到了一些东西但是当使用在SpringMVC上配置的RESTEasy时我无法让它工作。似乎只有当RESTEasy配置为servlet时它才有效。但是我希望在构建时而非运行时生成JS代码。你知道有什么解决方案可以做这样的事情吗? 最佳答案 Netbeans在“Web服务”中有一个向导“RESTfulJavaScript客户端”,它生成一个包含所有所需javascript的html页面。这可能是一个很好的起点。您将需要一个wadl来描述您的re

  10. javascript - ws ://? 是什么 - 2

    出于好奇,我正在检查stackoverflow页面并注意到有趣的url:ws://sockets-se.or.stackexchange.com/我想了解更多关于ws协议(protocol)的信息,但我什至不知道如何开始搜索,因为搜索ws或wsprotocol并没有向我显示我期待的结果...这个协议(protocol)是什么?谁能给我指明方向? 最佳答案 ws://是WebSockets的URI方案.它们通过单个TCP连接提供全双工通信。您经常看到它们用于将数据异步流式传输到浏览器...例如,聊天应用程序或基于浏览器的游戏。因此,由

随机推荐