当前位置: 首页 > 知识库问答 >
问题:

使用RESTEasy在JAX-RS中找不到路径的资源

虞唯
2023-03-14

我创建了一个原型为maven archetype webapp的maven项目,然后为了将我的应用程序公开为rest webservice,我正在使用RestEasy,但是在rest应用程序中实现后,我无法访问我创建的URL。请告诉我我做错了什么。感谢您阅读此问题。

我的UserManagementController如下:

package com.restimplement.btl.pl.controller;

import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;

import com.restimplement.btl.pl.dao.UserDao;

@Path(value="/UserManagement")
public class UserManagementController {

    @GET
    @Path("/{pathParameter}")
    public Response getAllUsers( @PathParam("pathParameter") String pathParameter,
            @DefaultValue("Nothing to say") @QueryParam("queryParameter") String queryParameter)
    {
        UserDao userdao = new UserDao();
        System.out.println("able to visit  user add");
        String response = "details from: "+userdao.findObject();
        return Response.status(200).entity(response).build();
    }

}

我的MyRestWS. java如下:

package com.restimplement.btl.pl.controller;

import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;

public class MyRestWS extends Application{

    private Set<Object> singletons = new HashSet<Object>();

    public MyRestWS() {
        singletons.add(new UserManagementController());
    }
}

我的网站。xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<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>BTL_PL</display-name>

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

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

    <servlet>
        <servlet-name>resteasy-servlet</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.restimplement.btl.pl.controller.MyRestWS</param-value>
        </init-param>
    </servlet>

</web-app>

该应用程序已成功部署在JBoss wildfly 8上,但在访问URL时:http://localhost:8080/BTL_PL/btlservice/UserManagement/getUser; 我在jboss控制台上发现以下错误:

14:19:33,240 WARN  [org.jboss.resteasy.core.ExceptionHandler] (default task-10)
failed to execute: javax.ws.rs.NotFoundException: Could not find resource for fu
ll path: http://localhost:8080/BTL_PL/btlservice/UserManagement/getUser
        at org.jboss.resteasy.core.registry.ClassNode.match(ClassNode.java:73) [
resteasy-jaxrs-3.0.6.Final.jar:]
        at org.jboss.resteasy.core.registry.RootClassNode.match(RootClassNode.ja
va:48) [resteasy-jaxrs-3.0.6.Final.jar:]
        at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(Res
ourceMethodRegistry.java:444) [resteasy-jaxrs-3.0.6.Final.jar:]
        at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousD
ispatcher.java:234) [resteasy-jaxrs-3.0.6.Final.jar:]
        at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispa
tcher.java:171) [resteasy-jaxrs-3.0.6.Final.jar:]
        at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.
service(ServletContainerDispatcher.java:220) [resteasy-jaxrs-3.0.6.Final.jar:]
        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.servi
ce(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.0.6.Final.jar:]
        at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.servi
ce(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.0.6.Final.jar:]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-s
ervlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHand
ler.java:85) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.hand
leRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.0.0.Final.jar:
1.0.0.Final]
        at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(
ServletDispatchingHandler.java:36) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final
]
        at org.wildfly.extension.undertow.security.SecurityContextAssociationHan
dler.handleRequest(SecurityContextAssociationHandler.java:78)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateH
andler.java:25) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.servlet.handlers.security.SSLInformationAssociationHandle
r.handleRequest(SSLInformationAssociationHandler.java:113) [undertow-servlet-1.0
.0.Final.jar:1.0.0.Final]
        at io.undertow.security.handlers.AuthenticationCallHandler.handleRequest
(AuthenticationCallHandler.java:52) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRe
quest(AbstractConfidentialityHandler.java:45) [undertow-core-1.0.0.Final.jar:1.0
.0.Final]
        at io.undertow.servlet.handlers.security.ServletConfidentialityConstrain
tHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61) [underto
w-servlet-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandl
er.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.
0.0.Final.jar:1.0.0.Final]
        at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(Se
curityInitialHandler.java:76) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateH
andler.java:25) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
        at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.han
dleRequest(JACCContextIdHandler.java:61)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateH
andler.java:25) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateH
andler.java:25) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest
(ServletInitialHandler.java:240) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(Se
rvletInitialHandler.java:227) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler.access$000(Servlet
InitialHandler.java:73) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(Se
rvletInitialHandler.java:146) [undertow-servlet-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:168)
 [undertow-core-1.0.0.Final.jar:1.0.0.Final]
        at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:6
87) [undertow-core-1.0.0.Final.jar:1.0.0.Final]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
java:1145) [rt.jar:1.7.0_79]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:615) [rt.jar:1.7.0_79]
        at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_79]

如果我需要在查询中添加其他内容以获取更多信息,请告诉我。此外,如果我试图访问错误的URL。

共有1个答案

孙辰阳
2023-03-14

在Servlet 3中。x环境(如WildFly 8.x),web。xml部署描述符不是必需的,在简单的应用程序中可能不需要它。

您可以将其删除并配置您的maven-war-plugin以忽略丢失的web.xml文件,方法是在您的pom.xml文件中将ailOnMissingWebXml配置属性设置为false

<plugins>
    ...
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.0.0</version>
        <configuration>
            <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
    </plugin>
    ...
</plugins>

将应用程序的子类更改为:

@ApplicationPath("btlservice")
public class MyRestWS extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        HashSet<Class<?>> set = new HashSet<Class<?>>();
        set.add(UserManagementController.class);
        return set;
    }
}

getClass()方法返回一组根资源、提供者和功能类。资源类实例的默认生命周期是每个请求。提供者(直接或通过功能注册)的默认生命周期是单例。

ApplicationPath注释可用于注释自定义应用程序子类,并为应用程序中配置的所有JAX-RS资源定义基本应用程序URI。使用它,您不需要在web中声明servlet。xml部署描述符。

有关Application类的更多详细信息,这个答案可能很有见地。

最后,请求应在以下URL中可用的endpoint:

http://[server]:[port]/[context]/btlservice/UserManagement/[path-parameter]
 类似资料:
  • 问题内容: 我一直在尝试使用NetBeans Ide创建一个简单的Restful WebService。 我的Java EE版本是:Java EE 7 Web。 我创建了一个新的Java Web应用程序,设置此ContexPath: 。 现在,运行我的应用程序,浏览器在以下位置显示我的页面: 因此,一切正常。 然后,我尝试使用RESTful Web服务向导创建一个简单的Restful资源。 因此,

  • 我试图在JBoss AS 7.1下部署一个简单的web应用程序,该应用程序与Resteasy捆绑在一起。根据文档,只需要(至少)一个空的、一个带有注释的和其他类的的类 下面是我所遵循的文档: https://docs.jboss.org/author/display/as7/jax-rs+reference+guide https://docs.jboss.org/author/display/a

  • 问题内容: 可以做这样的事情吗? 我正在使用RESTEasy。 问题答案: 是的,您可以这样做,尽管您将必须重命名方法,以使它们的签名不同。 更新: 检查Dieter Cailliau的答案, 可能是您想要的… 您可以在其中检查JSR-311的API及其参考实现,名称为“ jersey”: JSR311 API 泽西岛

  • 然而,有一个名为resteasy.scan的配置开关,对其进行了描述: “自动扫描WEB-INF/lib jar和WEB-INF/classes目录,查找@provider和JAX-RS资源类(@path、@get、@post等)并注册它们” ...所以,如果我想自动扫描我的资源,而不需要在web.xml中列出它们,或者必须手动将它们的类添加到扩展Application的类中的单例列表中...我应

  • 我正在尝试为我开发的REST API创建一个过滤器,该API遵循以下问题,即使用JAX-RS和Jersey进行基于REST令牌的身份验证的最佳实践。 我错过了什么?提前道谢。

  • 什么是resteasy?RESTEasy和JAX-RS有什么区别?和之间有什么区别?